微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ATL CImage::SetPixel 不适用于单色 BMP (nBPP=1)

如何解决ATL CImage::SetPixel 不适用于单色 BMP (nBPP=1)

我正在尝试编写一个程序来更改 BMP 文件并在特定位置添加一些修改。我试图修改的 BMP 是单色的(每像素 1 位),因为图像尺寸需要非常小。我正在使用 ATL CImage 类来执行此操作。

但是,我似乎无法使用 SetPixel 更改单色 BMP 的特定像素。

(为了简单起见,我稍微修改了这段代码。'color' 来自程序的另一部分,并且只返回 RGB(255,255,255) 或 RGB(0,0))

CImage bmp;
bmp.Create(180,1369,1);
for (int y = 0; y < 1369; y++)
    {
        for (int x = 0; x < 180; x++) {
            bmp.SetPixel(x,y,color);
        }
    }

代码显示时返回黑色 BMP。如果我将 bmp.Create 中的“1”(每个像素的位数)修改为大于 8 的任何值,则代码会按预期工作。但是,该修复不适合我,因为我最终得到的 BMP 太大。

有什么办法可以让 SetPixel 在这里工作吗?

解决方法

看来,当您使用 Create() 制作单色位图时,它会创建两种颜色均为黑色的位图。您需要调整颜色表:

RGBQUAD colors[2] = { 0 };
bmp.GetColorTable(0,2,colors);
colors[1].rgbRed = colors[1].rgbGreen = colors[1].rgbBlue = 0xff;
bmp.SetColorTable(0,colors);

然后如果您将像素设置为 RGB(0xff,0xff,0xff) 它应该可以正常工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。