BITMAPINFOHEADER问题

实达诚实 2009-02-09 11:02:16
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, *PBITMAPINFOHEADER;


请问:biBitCount和biClrUsed分别代表什么具体的意思?

如果biClrUsed的值为0,表示什么意思,这个时候biBitCount的值位多少?

如果biClrUsed的值不为0,相应的biBitCount的值位多少?
...全文
1033 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
实达诚实 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cnzdgs 的回复:]
单色位图不一定是黑色和白色,任意两种颜色都可以。
此外,biBitCount也可以是16或32。
[/Quote]

对!

但是一般在处理的时候,都认为是黑白二色图片嘛
cnzdgs 2009-02-11
  • 打赏
  • 举报
回复
单色位图不一定是黑色和白色,任意两种颜色都可以。
此外,biBitCount也可以是16或32。
实达诚实 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 eblis88 的回复:]
最后一句

如果ClrUsed是0,颜色数目等于2^biBitCount。
[/Quote]

谢谢提醒
路人乙2019 2009-02-11
  • 打赏
  • 举报
回复
基本上对了。
实达诚实 2009-02-11
  • 打赏
  • 举报
回复
我在看了大家的回复,总结了一下

 biBitCount

biBitCount=1 表示位图最多有两种颜色,黑色和白色。图像数据阵列中的每一位表示一个像素。

biBitCount=4 表示位图最多有16种颜色。每个像素用4位表示,并用这4位作为彩色表的表项来查找该像素的颜色。例如,如果位图中的第一个字节为0x1F,它表示有两个像素,第一像素的颜色就在彩色表的第2表项中查找,而第二个像素的颜色就在彩色表的第16表项中查找。

biBitCount=8 表示位图最多有256种颜色。每个像素用8位表示,并用这8位作为彩色表的表项来查找该像素的颜色。例如,如果位图中的第一个字节为0x1F,这个像素的颜色就在彩色表的第32表项中查找。

biBitCount=24 表示位图最多有224=16 777 216种颜色。bmiColors (或者bmciColors)成员就为NULL。每3个字节代表一个像素,其颜色有R、G、B字节的相对强度决定。

ClrUsed

BITMAPINFOHEADER结构中的成员ClrUsed指定实际使用的颜色数目。如果ClrUsed设置成0,位图使用的颜色数目就等于biBitCount成员中的数目。

Learn-anything 2009-02-11
  • 打赏
  • 举报
回复
差不多了
eblis88 2009-02-11
  • 打赏
  • 举报
回复
最后一句

如果ClrUsed是0,颜色数目等于2^biBitCount。
supercow 2009-02-11
  • 打赏
  • 举报
回复
biBitCount 就是2多少次幂的值个色.

biClrUsed 一般等于0 就是ALL颜色.

If biClrUsed is nonzero and the biBitCount member is less than 16, the biClrUsed member specifies the actual number of colors the graphics engine or device driver accesses.

If biBitCount is 16 or greater, the biClrUsed member specifies the size of the color table used to optimize performance of the system color palettes.

就不翻译了... MSDN...

eblis88 2009-02-10
  • 打赏
  • 举报
回复
压缩和颜色有什么关系?
文件头只和编写读取函数时,函数自己的读取方式有关。

一般只做统一,而不是硬性规定。

biClrUsed是和调色板联系起来看的。

调色版里面的元素个数有biClrUsed个。
如果biClrUsed=0
那么共有2的biBitCount次幂个元素


参见《Visual C++数字图像处理典型算法及实现》人民邮电出版社p15-16
cnzdgs 2009-02-09
  • 打赏
  • 举报
回复
biBitCount表示图象的颜色位数,或者说每个像素用几位数据来表示,例如256色位图该值为8。biClrUsed表示图象中用到了多少种颜色,通常给0,表示用到了所有颜色。
Show_Mike 2009-02-09
  • 打赏
  • 举报
回复
你的问题解答如下:
1.biBitCount和biClrUsed分别表示一个像素所用比特位数以及位图实际所用颜色表内色彩索引值数目;
2.如果biClrUsed的值为0,位图采用biCompression指定的色彩数目对应的最大颜色数,这时biBitCount的值由相应的压缩模式给定.
3.若biClrUsed的值不为0,则对应的biBitCount的值根据biClrUsed的值的范围来决定.详细的解释,请参看msdn.
实达诚实 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Show_Mike 的回复:]
2.如果biClrUsed的值为0,位图采用biCompression指定的色彩数目对应的最大颜色数,这时biBitCount的值由相应的压缩模式给定.
3.若biClrUsed的值不为0,则对应的biBitCount的值根据biClrUsed的值的范围来决定.详细的解释,请参看msdn.
[/Quote]

biClrUsed的值为0,表示用到所有颜色。如果我没有采用压缩方式,则biBitCount的值是多少?

biClrUsed的值不为0,biClrUsed的值的范围应该是在一个什么范围?或者说是应该取那些值?

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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