c - 位图反转颜色

标签 c winapi hwnd ppm getdibits

前段时间我问了一个关于将 hwnd 保存到 ppm 文件的问题。感谢 stackoverflow 用户,我已经解决了我的问题。我的工作正常,但我仍然有一个问题:红色和蓝色颠倒了。

代码和我之前的问题在这里: hwnd to ppm issue

这是位图信息数据:

bi.biSize = sizeof(BITMAPINFOHEADER);    
bi.biWidth = w;    
bi.biHeight = -h;  
bi.biPlanes = 1;    
bi.biBitCount = 24;    
bi.biCompression = BI_RGB;    

bi.biSizeImage = 0;  
bi.biXPelsPerMeter = 0;    
bi.biYPelsPerMeter = 0;    
bi.biClrUsed = 0;    
bi.biClrImportant = 0;

我用谷歌搜索,问题似乎是 BI_RGB,我应该使用 BI_BITFIELDS ...但我没有找到有关如何使用它的文档。 我真的不想逐像素读取所有数据以恢复蓝色和红色。 有没有什么方法可以在不逐像素地完成的情况下完成它?

提前感谢您的帮助

最佳答案

在 24bpp BMP 中,像素以最小字节序存储其颜色。蓝色在前,红色在后。在 PPM 中,红色在前,蓝色在最后。这在很大程度上解释了为什么它在 Windows 上是一种晦涩的图像格式。您必须自己交换存储顺序。

关于c - 位图反转颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212951/

相关文章:

c++ - 如何检查C中是否存在文件:\drive using VC++?

c++ - 在 windbg 的用户模式转储中查找 hwnd 信息

C/ProC printf 返回值太大

c++ - 为什么 prevInstance 存在于 WinMain 和 wWinMain 中,如果它始终为 NULL

更改我在 C 函数中传递的指针

c++ - 使用 Win32 API 验证 HWND

c++ - 是否可以在 MessageBox() 中显示 HWND->i?

winapi - 有没有办法知道另一个 hwnd 何时关闭?

c - 我不明白 SPI 驱动程序中的一行代码

c - 棘手的递归函数007