【问题标题】:(C++) Weird bitmap issue - Colors in grayscale(C++) 奇怪的位图问题 - 灰度颜色
【发布时间】:2012-06-16 02:07:25
【问题描述】:

我在用 C++ 创建位图时遇到了一个奇怪的问题。我正在使用 BITMAPFILEHEADER 和 BITMAPINFOHEADER 结构来创建 8 位灰度图像。位图数据通过 DMA 来自相机,因为 unsigned char 具有与预期完全相同的长度。保存图像并打开它,它包含颜色?!

应该是这样的:http://www.freeimagehosting.net/qd1ku
原来如此:http://www.freeimagehosting.net/83r1s

你知道这是从哪里来的吗?

位图的Header是:

42 4D 36 00 04 00 00 00 00 00 36 00 00 00 28 00 00 00 00 02 00 00 00 02 00 00 01 00 08 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

信息标题: 42 4D 它是一个位图 36 00 04 00 位图大小 = 0x04 00 36 - 标题大小 = 512x512 00 00 00 00 保留 36 00 00 00 偏移量 = Sizeof(Bitmapinfoheader); 28 00 00 00 Sizeof(Bitmapinfoheader); 00 02 00 00 =0x200 = 512 像素。 00 02 00 00 相同 01 00 = 1 - 标准。不再使用。 08 00 颜色部门 = 8 位。 00 00 00 00 压缩:0 = 无。 00 00 00 00 文件大小或零 00 00 00 00 X-Dot-Per-Meter,可以保留 0 00 00 00 00 y-Dot-Per-Meter,可以保留 0 00 00 00 00 如果为零,则使用所有 255 种颜色 00 00 00 00 如果为零,则不使用颜色表值

你有什么想法吗?

【问题讨论】:

  • 一个 8bpp 的图像应该总是包含一个颜色表。
  • 哦,对不起。你是对的。 Windows下的位图是……嗯……下次我会用png的。

标签: c++ colors bitmap grayscale


【解决方案1】:

在 windows 下,如果您没有为 8 位图像提供调色板,则会为您提供系统默认调色板。我不记得添加调色板的 win32 方式,但它应该像创建一个 256 元素的 char 数组一样简单,其中每个条目的值与其索引相同,然后在适当的位置将其写入文件并更新偏移参数等。

【讨论】:

  • 也许你是对的。我不明白的地方:如果我只给出一个亮度参数,观看者如何在不丢失像素的情况下添加颜色?
  • 在这种情况下,恐怕我不明白您所说的“丢失像素”是什么意思。当首先没有找到任何调色板时,查看器将调色板添加到您的图像不会删除任何信息。
  • 谢谢,你是对的。创建 24 位位图并将 8 位数据写入文件 3 次,将以有效的彩色(我的意思是灰色)图片结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 2013-07-21
  • 2018-03-09
  • 2011-05-06
  • 2013-12-25
  • 2016-03-28
相关资源
最近更新 更多