如何使用 Windows API 获取像素格式布局

How to get the pixelformat layout using the Windows API

本文关键字:像素 格式 布局 获取 API 何使用 Windows      更新时间:2023-10-16

给定一个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,在所有用户中,我还没有遇到一个没有相同格式的用户。我还没有在 RGBA 而不是 BGRA 中看到 DC 或默认后台缓冲区格式。

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

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

根据PIXELFORMATDESCRIPTOR的文档:

像素类型 指定像素数据的类型。定义了以下类型: PFD_TYPE_RGBA RGBA 像素。每个像素按此顺序有四个分量:红色、绿色、蓝色和 Alpha。 PFD_TYPE_COLORINDEX 颜色索引像素。每个像素使用一个颜色索引值。

所以看起来它们要么是 RGBA 要么是索引的。