19,468
社区成员
发帖
与我相关
我的任务
分享
typedef struct{ //文件头
short int bfType;
int bfSize;
short int bfReserved1;
short int bfReserved2;
int bfoffBits;
} FILEHEADER;
typedef struct { //信息头
long biSize;
long biWidth;
long biHeight;
short int biPlanes;
short int biBitCount;
long biCompress;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
}INFOHEADER;
typedef struct { //调色板
unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
}rgbquad;
typedef struct { //存灰度值
int m;
int n;
char huidu;
bool flag;
}huiduzhi;
private:
FILEHEADER fileheader1;
INFOHEADER infoheader1;
rgbquad rgbquad[256];
huiduzhi huiduzhi1[1000][1000];
Unit.cpp
void __fastcall TForm1::Open1Click(TObject *Sender)
{
String filename;
FILE *fp;
int x,y;
BYTE *hang;
OpenDialog1->DefaultExt="BMP";
OpenDialog1->FileName="*.bmp";
OpenDialog1->Execute();
filename=OpenDialog1->FileName;
CurrentFile=OpenDialog1->FileName;
Form3->Caption=CurrentFile;
if((fp=fopen(filename.c_str(),"rb"))==NULL)
{
ShowMessage("不能打开文件");
fclose(fp);
}
else
{
int j,k;
j=sizeof(INFOHEADER);
k=sizeof(rgbquad);
fseek(fp,0L,0);
fread(&fileheader1.bfType,2,1,fp);
fseek(fp,2L,0);
fread(&fileheader1.bfSize,4,1,fp);
fseek(fp,6L,0);
fread(&fileheader1.bfReserved1,2,1,fp);
fseek(fp,8L,0);
fread(&fileheader1.bfReserved2,2,1,fp);
fseek(fp,10L,0);
fread(&fileheader1.bfoffBits,4,1,fp);
fread(&infoheader1,j,1,fp);
fread(rgbquad,k*256,1,fp);
Bitmap = new Graphics::TBitmap();
Bitmap->Width = infoheader1.biWidth;
Bitmap->Height = infoheader1.biHeight;
Image1->Picture->Graphic = Bitmap;
Form1->Height =(Bitmap->Height)+27;
Form1->Width=(Bitmap->Width)+8;
hang=new BYTE [infoheader1.biWidth];
if(hang==NULL)
{
ShowMessage("开辟空间不成功!");
}
fseek(fp,fileheader1.bfoffBits,0);
for(y=infoheader1.biHeight;y>=0;y--)
{
fread(hang,1,infoheader1.biWidth,fp);
for(x=0;x<=infoheader1.biWidth;x++)
{
huiduzhi1[x][y].m=x;
huiduzhi1[x][y].n=y;
huiduzhi1[x][y].huidu=hang[x];
huiduzhi1[x][y].flag=false;
Image1->Canvas->Pixels[x][y]=TColor(RGB(rgbquad[hang[x]].rgbRed,rgbquad[hang[x]].rgbGreen,rgbquad[hang[x]].rgbBlue));
}
fclose(fp);
free(hang);
}
}