读取一个BMP文件内容,然后在存放在另一个MBP文件里的有关问题
读取一个BMP文件内容,然后在存放在另一个MBP文件里的问题
如题:
(1)新建2个BMP文件333.bmp和222.bmp,然后用画图工具在333.bmp中画上几跟线条.
(2)然后用文件操作把333.bmp的相关信息读取并存放到数组中.
(3)最后在用文件操作把读取的相关信息写入到222.bmp中.
问题出现了:
(1)第1步过后,333.bmp的文件大小为729K,但把从333.bmp中读取的相关信息写入到222.bmp中后,222.bmp文件只有244K.
(2)用画图工具打开222.bmp,出现提示 "绘图失败 ".
相关代码如下:
unsigned char TMPBUF[256];
UINT32 *palette;
unsigned char *bmpdata;
long TotalColumns;
long TotalRows;
long TotalBytes;
void CFileView::OnFile()
{
FILE *fp_bitmap=fopen( "222.bmp ", "wb ");
fwrite(TMPBUF,1,54,fp_bitmap);
fwrite(palette,4,256,fp_bitmap);
fwrite(bmpdata,1,(size_t)TotalBytes,fp_bitmap);
fclose(fp_bitmap);
}
void CFileView::OnRfile()
{
FILE *fp_bitmap=fopen( "333.bmp ", "rb ");
fread(TMPBUF,1,54,fp_bitmap);
palette=(UINT32 *)malloc(sizeof(UINT32[256]));
fread(palette,4,256,fp_bitmap);
TotalRows=(unsigned short int)TMPBUF[19]*256+(unsigned short int)TMPBUF[18];
TotalColumns=(unsigned short int)TMPBUF[23]*256+(unsigned short int)TMPBUF[22];
TotalBytes=TotalColumns*TotalRows;
unsigned char * buffer=(unsigned char *)(malloc(TotalBytes));
bmpdata=buffer;
for(int i=0;i <TotalRows;i++)
{
fread(buffer,1,TotalColumns,fp_bitmap);
buffer = buffer+(TotalColumns-1);
}
fclose(fp_bitmap);
}
如我要在222.bmp文件中正确显示333.bmp的内容,需要修改那些地方.
望高人指点!
------解决方案--------------------
bmp文件结构
1、BITMAPFILEHEADER
2、BITMAPINFO
3、data
222.bmp文件中没有1和2,不是正常的位图文件
------解决方案--------------------
帮顶,期待高人
如题:
(1)新建2个BMP文件333.bmp和222.bmp,然后用画图工具在333.bmp中画上几跟线条.
(2)然后用文件操作把333.bmp的相关信息读取并存放到数组中.
(3)最后在用文件操作把读取的相关信息写入到222.bmp中.
问题出现了:
(1)第1步过后,333.bmp的文件大小为729K,但把从333.bmp中读取的相关信息写入到222.bmp中后,222.bmp文件只有244K.
(2)用画图工具打开222.bmp,出现提示 "绘图失败 ".
相关代码如下:
unsigned char TMPBUF[256];
UINT32 *palette;
unsigned char *bmpdata;
long TotalColumns;
long TotalRows;
long TotalBytes;
void CFileView::OnFile()
{
FILE *fp_bitmap=fopen( "222.bmp ", "wb ");
fwrite(TMPBUF,1,54,fp_bitmap);
fwrite(palette,4,256,fp_bitmap);
fwrite(bmpdata,1,(size_t)TotalBytes,fp_bitmap);
fclose(fp_bitmap);
}
void CFileView::OnRfile()
{
FILE *fp_bitmap=fopen( "333.bmp ", "rb ");
fread(TMPBUF,1,54,fp_bitmap);
palette=(UINT32 *)malloc(sizeof(UINT32[256]));
fread(palette,4,256,fp_bitmap);
TotalRows=(unsigned short int)TMPBUF[19]*256+(unsigned short int)TMPBUF[18];
TotalColumns=(unsigned short int)TMPBUF[23]*256+(unsigned short int)TMPBUF[22];
TotalBytes=TotalColumns*TotalRows;
unsigned char * buffer=(unsigned char *)(malloc(TotalBytes));
bmpdata=buffer;
for(int i=0;i <TotalRows;i++)
{
fread(buffer,1,TotalColumns,fp_bitmap);
buffer = buffer+(TotalColumns-1);
}
fclose(fp_bitmap);
}
如我要在222.bmp文件中正确显示333.bmp的内容,需要修改那些地方.
望高人指点!
------解决方案--------------------
bmp文件结构
1、BITMAPFILEHEADER
2、BITMAPINFO
3、data
222.bmp文件中没有1和2,不是正常的位图文件
------解决方案--------------------
帮顶,期待高人