日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>C/C++語言編程>

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

大?。?/span>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 // 定義顯示位圖操作的執(zhí)行結果

{

  OK, //成功

  FORMATERROR, // 文件格式錯誤

  FILENOTFOUND, //文件未打開

  OVERFLOW,      // 內存溢出

  READERROR     // 讀文件錯誤

}RESULTCODE;

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

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字節(jié)為位圖文件頭基本信息

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

 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字節(jié)之后為位圖顏色轉換矩陣部分

 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 為點陣計數(shù)器, 位圖與顯示屏幕的坐標系統(tǒng)存在差別, 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色位圖編程下載

相關電子資料下載

      發(fā)表評論

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

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?
      阳春市| 大洼县| 徐水县| 凤山县| 黔西县| 平武县| 巴东县| 宾川县| 淮阳县| 噶尔县| 石景山区| 文昌市| 遵义县| 定西市| 鄂州市| 盐源县| 阳原县| 山阳县| 宁德市| 仙桃市| 疏附县| 南京市| 鹿邑县| 那曲县| 和平区| 福安市| 舞阳县| 平原县| 绵阳市| 四会市| 云南省| 台山市| 临沂市| 金阳县| 嘉祥县| 邹城市| 遂溪县| 基隆市| 百色市| 军事| 石景山区|