【发布时间】:2013-11-25 21:17:31
【问题描述】:
如何将单色 bmp 图像文件(在我的情况下为 16*16 像素)转换为二进制格式?此代码读取位图信息。我必须将像素信息存储到一个数组中,并且它没有正确存储。我已经分享了代码
#pragma pack(push, 1)
typedef struct BitMap
{
short Signature;
long Reserved1;
long Reserved2;
long DataOffSet;
long Size;
long Width;
long Height;
short Planes;
short BitsPerPixel;
long Compression;
long SizeImage;
long XPixelsPreMeter;
long YPixelsPreMeter;
long ColorsUsed;
long ColorsImportant;
long data[16];
}BitMap;
#pragma pack(pop)
读取图像文件:
struct BitMap source_info;
struct Pix source_pix;
FILE *fp;
FILE *Dfp;
Dfp=fopen("filename.bin","wb")
if(!(fp=fopen("filename.bmp","rb")))
{
printf(" can not open file");
exit(-1);
}
fread(&source_info, sizeof(source_info),1,fp);
printf("%d\n",source_info.DataOffSet);
printf("%d\n",source_info.Width*source_info.Height);
for(i=0;i<16;i++)
fprintf(Dfp,"%d\t",source_info.data[i]);
使用十六进制编辑器观察到的输出是
突出显示的数据我想存储在数据数组中,以便我可以在代码中进一步使用它。
但是 filename.bin 中的输出是
0 16777215 63 63 63 95 95 95
31 31 31 31 31 31 31 31
我是这个领域的新手。有人可以帮我解决我哪里出错了吗?
【问题讨论】:
-
首先,如果您打印十六进制数字,比较值可能会更容易。
-
@JoachimPileborg 是的。实际上,如果 OP 尝试使用十六进制数字是没有问题的——它们是一样的..
-
十六进制输出为 0x00 0xffffff 0x3f 0x3f 0x3f 0x5f 0x5f 0x5f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 0x1f 你能解释一下输出是如何存储的吗?我无法获得相同的输出
-
@user2967899 由于您的最后评论,我已经更新了我的答案。
标签: c binary binaryfiles monochrome