求救:如何添加位图头信息??

erif1001 2010-04-16 04:39:15
从img文件中读取180*120*4长度的字节数据(通过偏移量取),转换成16进制数字符串存放到xml文件中供提取,要求读取到这个16进制的字符串数据后转换成二进制就直接生成图片,但是img文件在生成的时候把头信息去掉了,无法直接读取,现在要添加上头信息才可以。现在是有ImageDate(16进制数字符串),没有BITMAPFILEHEADER和BITMAPINFOHEADER。

位图大致构成:
1、位图文件头BITMAPFILEHEADER
2、位图信息头BITMAPINFOHEADER
3、调色板Palette
4、实际的位图数据ImageDate

问题就是如何将头信息(文件头和信息头)加到16进制字符串前面,使得可以直接读取?结构体如何转换成16进制的字串??----C#中实现

附:文件头和信息头结构体
文件头:
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数),各个域的说明如下:
bfType
指定文件类型,必须是0x424D,即字符串“BM”,也就是说所有.bmp文件的头两个字节都是“BM”。
bfSize
指定文件大小,包括这14个字节。
bfReserved1,bfReserved2
为保留字,不用考虑
bfOffBits
为从文件头到实际的位图数据的偏移字节数,即图1.3中前三个部分的长度之和。

信息头BITMAPINFOHEADER,也是一个结构,其定义如下:
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
这个结构的长度是固定的,为40个字节(LONG为32位整数),各个域的说明如下:
biSize指定这个结构的长度,为40。
biWidth指定图象的宽度,单位是象素。
biHeight指定图象的高度,单位是象素。
biPlanes必须是1,不用考虑。
biBitCount 指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)(新的.bmp格式支持32位色)。
biCompression指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。
biSizeImage指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’ × biHeight
要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,最接近4的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241,biWidth’=244)。
如果biCompression为BI_RGB,则该项可能为零
biXPelsPerMeter指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在第4章详细介绍。
biYPelsPerMeter指定目标设备的垂直分辨率,单位同上。
biClrUsed指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2biBitCount
biClrImportant指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。
...全文
309 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
erif1001 2010-04-16
  • 打赏
  • 举报
回复
img文件不是固定的,按数据库中记录的索引查找对应的图片,提取的16进制串没有头信息,想知道C#怎么样加这个位图头信息呢?
md5e 2010-04-16
  • 打赏
  • 举报
回复
对着项目,右键,属性->资源->创建一个资源包->添加资源文件

引用
Import.Properties.Resources.no

Import为你的项目名称
no为你的位图名称

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧