怎么把位图放到bitmapinfoheader

怎么把位图放到bitmapinfoheader,第1张

位图信息头BITMAPINFOHEADER,也是一个结构,其定义如下:

[cpp] view plain copy print?

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位整数),各个域的说明如下:

1、biSize 指定这个结构的长度,为40。

2、biWidth 指定图象的宽度,单位是象素。

3、biHeight 指定图象的高度,单位是象素。

4、 biPlanes 必须是1,不用考虑。

5、biBitCount 指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。

6、biCompression 指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。

BITMAPINFOHEADER 是结构(bitmap信息头):

typedefstructtagBITMAPINFOHEADER {

DWORD biSize

LONG biWidth

LONG biHeight

WORD biPlanes

WORD biBitCount

DWORD biCompression

DWORD biSizeImage

LONG biXPelsPerMeter

LONG biYPelsPerMeter

DWORD biClrUsed

DWORD biClrImportant

} BITMAPINFOHEADER, *PBITMAPINFOHEADER

sizeof(BITMAPINFOHEADER) -- 计算出这个结构占内存大小,单位字节。

(DWORD) 是强制转换为 (unsigned long int) 数值,DWORD就是unsigned long int

-------

(LPSTR) 就是 (char *)因为 有定义 typedef char* LPSTR 小括号括起来就是强制转换。

------

RGBQUAD 是 结构 (RGBA 4字节结构):

typedef struct tagRGBQUAD {

BYTE rgbBlue

BYTE rgbGreen

BYTE rgbRed

BYTE rgbReserved

} RGBQUAD

LPRGBQUAD 是指针,指向 RGBQUAD 型结构的指针。

--

lpRGB是指针, 指向计算出来的RGB数据开始位置。

先判断一下 sizeof(infoHeader) 是不是40个字节。

如:

int i = sizeof(infoHeader) 跟踪一下,看i是不是40个字节。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11588703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存