2007年10月24日星期三

Read_bmp using C in BCB

AnsiString FileName;

byte *data;//law data

FILE *fp;

 
 

// argument of FileHeader

byte *FileHeader = new byte[14];

char type[2];

short int reserved1,reserved2;

int size,offset;

 
 

// argument of InfoHeader

// XPPM is XPelPerMeter, YPPM is YPelPerMeter,

// ClrU is ClrUsed , ClrI is Clrimportant

byte *InfoHeader = new byte[40];

short int planes,bitcount;

int bisize,width,height,compression,sizeimage,XPPM,YPPM,ClrU,ClrI;

 
 

// argument of show image

int i,j,W,H,Y ;

int B,G,R ;

int k=0;

 
 

//main function

if(OpenDialog1->Execute()){

FileName = OpenDialog1->FileName;

}

fp=fopen(FileName.c_str(),"rb");

 
 

/*************************************************************

** read Header information, **

** it includes FileHeader(14bytes) and InfoHeader(40bytes)**

*************************************************************/

//read FileHeader information

fread(FileHeader,14,1,fp);

type[0] =FileHeader[0] ;

type[1] =FileHeader[1] ;

size =FileHeader[2] +FileHeader[3]*256+FileHeader[4]*256*256+FileHeader[5]*256*256*256;

reserved1=FileHeader[6] +FileHeader[7]*256;

reserved2=FileHeader[8] +FileHeader[9]*256;

offset =FileHeader[10]+FileHeader[11]*256+FileHeader[12]*256*256+FileHeader[13]*256*256*256 ;

//show FileHeader data

Form1->Label_showType->Caption = type;

Form1->Label_sohwSize->Caption = size;

Form1->Label_showReserved1->Caption =reserved1;

Form1->Label_showReserved2->Caption =reserved2;

Form1->Label_showOffset->Caption =offset;

 
 

//read InfoHeader information

fread(InfoHeader,40,1,fp);

bisize =InfoHeader[0]+InfoHeader[1]*256+InfoHeader[2]*256*256+InfoHeader[3]*256*256*256;

width =InfoHeader[4]+InfoHeader[5]*256+InfoHeader[6]*256*256+InfoHeader[7]*256*256*256;

height =InfoHeader[8]+InfoHeader[9]*256+InfoHeader[10]*256*256+InfoHeader[11]*256*256*256;

planes =InfoHeader[12]+InfoHeader[13]*256;

bitcount =InfoHeader[14]+InfoHeader[15]*256;

compression=InfoHeader[16]+InfoHeader[17]*256+InfoHeader[18]*256*256+InfoHeader[19]*256*256*256;

sizeimage =InfoHeader[20]+InfoHeader[21]*256+InfoHeader[22]*256*256+InfoHeader[23]*256*256*256;

XPPM =InfoHeader[24]+InfoHeader[25]*256+InfoHeader[26]*256*256+InfoHeader[27]*256*256*256;

YPPM =InfoHeader[28]+InfoHeader[29]*256+InfoHeader[30]*256*256+InfoHeader[31]*256*256*256;

ClrU =InfoHeader[32]+InfoHeader[33]*256+InfoHeader[34]*256*256+InfoHeader[35]*256*256*256;

ClrI =InfoHeader[36]+InfoHeader[37]*256+InfoHeader[38]*256*256+InfoHeader[39]*256*256*256;

//show InfoHeader data

Form1->Label_showBisize->Caption=bisize;

Form1->Label_showWidth->Caption=width;

Form1->Label_showHeight->Caption=height;

Form1->Label_showPlanes->Caption=planes;

Form1->Label_showBitcount->Caption=bitcount;

Form1->Label_showCompression->Caption=compression;

Form1->Label_showSizeimage->Caption=sizeimage;

Form1->Label_showXPPM->Caption=XPPM;

Form1->Label_showYPPM->Caption=YPPM;

Form1->Label_showClrU->Caption=ClrU;

Form1->Label_showClrI->Caption=ClrI;

 
 

data = new byte[sizeimage];//announce law data size

fseek(fp,offset,SEEK_SET);//move fp to the start of law data

 
 

//read law data and show image one pixel by one pixel

fread(data,sizeimage,1,fp);

//if the bitmap is color , one pixel is 3 bytes(bitcount is 24)

//if the bitmap os gray , one pixel is 1 byte (bitcount is 8)

if(bitcount==24){

for(i=0;i<sizeimage;i=i+3){

B=data[i];

G=data[i+1];

R=data[i+2];

W=k%width;

H=height-(k/width)-1;

Image_show->Canvas->Pixels[W][H]=R + G*256 + B*256*256;

k++;

}

}

else{

for(i=0;i<sizeimage;i++){

Y=data[i];

W=k%width;

H=height-(k/width)-1;

Image_show->Canvas->Pixels[W][H]=Y + Y*256 + Y*256*256;

k++;

}

}

 
 

fclose(fp);

delete FileHeader,InfoHeader,data;

終於...

好幾天前就一直想要把blooger給弄好
但因為一直在趕LAB的工作
所以一直到今天才弄
剛剛也將blogger和onenote做整合了
所以這也算是日記的備份
因為不打算跟朋友們講這個blogger的存在
所以我會將我對孟孟的思念記錄在此
另外也會將我在LAB所做的一些東西都給紀錄在這邊
這樣以後就都可以跟大家分享
以後就慢慢加油了
真的要好好將自己所有的一切都給盡量紀錄下來
好讓自己以後可以回憶

Test

To test my blogger .