0

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

它应该是这样的:http
://www.freeimagehosting.net/qd1ku 它是这样的:http ://www.freeimagehosting.net/83r1s

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

位图的标题是:

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 如果为零,则不使用颜色表值

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

4

1 回答 1

2

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

于 2012-06-13T07:14:06.163 回答