给定一个HDC,我不仅要弄清楚有多少红色,绿色,蓝色和Alpha(使用DescribePixelFormat),而且还要弄清楚它们的布局(BGR(A)或RGB(A)),以便可以执行像素和颜色分量级别的操作。

我是否应该始终假定它们处于BGR(A)顺序?这是一个合理的假设吗?

最佳答案

http://msdn.microsoft.com/en-us/library/dd183449(VS.85).aspx

那是存储为0x00BBGGRR的COLORREF的文档。

根据大多数WINAPI使用的方法,我必须假定Windows上的所有内容实际上都是以BGRA格式存储的。AFAIK,DIB是BGRA格式的。

您可以尝试将窗口涂成红色。创建一个DIB部分,并将像素复制到缓冲区中。如果第一个字节为0xFF,则为RGBA,否则为BGRA。

GDI32图像始终以BGRA形式存储在我的计算机上。 GDI24图像始终为BGR。我发布了一个图像处理API,并且在所有用户中,我还没有遇到一个格式不相同的API。我还没有看到DCA或默认的RGBA而不是BGRA的后缓冲格式。

您真正需要知道DC格式的原因是什么?我从未发现自己想知道。

读取图像时,可以从BitmapInfoHeader.biBitCount字段中找出位数。

09-06 21:09