伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>C/C++語言編程>

256色位圖格式與256色位圖編程

大小:28 人氣: 2010-08-14 需要積分:5
fdjslkjd的空間

用戶級別:注冊會員

貢獻文章:

貢獻資料:

下面就一個C++程序(DrawBmp.cpp, Borland C++ Builder 6.0 編譯運行通過)具體分析

?

//---------------------------------------------------------------------------

?

#include

#pragma hdrstop

#include "DrawBitmap.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

typedef enum // 定義顯示位圖操作的執行結果

{

  OK, //成功

  FORMATERROR, // 文件格式錯誤

  FILENOTFOUND, //文件未打開

  OVERFLOW,      // 內存溢出

  READERROR     // 讀文件錯誤

}RESULTCODE;

RESULTCODE DrawBmp(int start_x, int start_y, char filename[]); //顯示位圖函數定義

AnsiString filen;  // 需要顯示的文件名稱

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

{

   filen = InputBox("256位圖顯示程序","輸入256位圖文件名稱...",filen);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormPaint(TObject *Sender)

{

  RESULTCODE res = DrawBmp(0,0,filen.c_str());

}

#include "stdio.h"

unsigned char DAC[256][3];  // 顏色轉換矩陣

RESULTCODE DrawBmp(int start_x, int start_y, char filename[])

{

 int i,j,k,n,r,g,b,width,length;

 int xcnt = 0,ycnt = 0;

 FILE *fp;

 if((fp=fopen(filename,"rb"))==NULL)  // 打開位圖文件

 {

    ShowMessage("文件打開失敗");

    return FILENOTFOUND;

 }

 fseek(fp,28,SEEK_SET);  // 前28字節為位圖文件頭基本信息

 fread(&i,2,1,fp);         // 29,30字節為位圖色深位數

 if(i!=8) /*檢查是否為256色位圖*/

 {

        fclose(fp);

       return FORMATERROR;

 }

 fseek(fp,18,SEEK_SET);  

 fread(&width,4,1,fp);  // 19,20,21,22 存儲位圖寬度

 fread(&length,4,1,fp);  // 23,24,25,26 存儲表示位圖長度

 fseek(fp,54,SEEK_SET); // 54字節之后為位圖顏色轉換矩陣部分

 for(i=0;i<256;i++)

 {

    DAC[i][0] = fgetc(fp); 

    DAC[i][1] = fgetc(fp);

    DAC[i][2] = fgetc(fp); /*獲取R、G、B分量, 放到顏色轉換表中*/

    fgetc(fp);   //保留位, 不使用

 }

 Form1->Height = length+30;  //設置窗體顯示屬性, 按位圖大小調整窗體大小與位置

 Form1->Width = width;

 Form1->Left = (1024 - Form1->Width)/2; // 適用顯示分辨率 1024 * 768

 Form1->Top = (768 - Form1->Height)/2;

 ycnt = start_y+length; 

 unsigned char *buffer;  // 設置輸出緩沖

 buffer = (unsigned char *)malloc(width);  //分配行輸出所需空間到緩沖

 if (!buffer)

 {

    return OVERFLOW;

 }

 while (ycnt > 0)

// ycnt, xcnt 為點陣計數器, 位圖與顯示屏幕的坐標系統存在差別, ycnt  //也用于坐標轉換

 {

    xcnt = 0;

    if (fread(buffer,width,1,fp) != 1)  // 讀一行

    {

       return READERROR;

    }

    while (xcnt < width)  // 行內掃描各點,影射到顯示器

    {

        unsigned char data = buffer[xcnt];

        // 查找顏色轉換表, 輸出點陣到窗體

        Form1->Canvas->Pixels[xcnt][ycnt] =

        RGB( DAC[data][2],DAC[data][1],DAC[data][0]); 

        xcnt++;

    }

    ycnt--;

 }

 fclose(fp);

 return OK;

}

?

//---------------------------------------------------------------------------

非常好我支持^.^

(0) 0%

不好我反對

(1) 100%

256色位圖格式與256色位圖編程下載

相關電子資料下載

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?