如何使用 Windows API 获取像素格式布局
How to get the pixelformat layout using the Windows API
给定一个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 要么是索引的。
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 为什么更改视频格式会更改其像素值?
- 使用C++解码为ffmpeg中的特定像素格式
- 图像的像素格式始终返回 32 位
- glew和glut您如何激活像素格式
- 未知像素格式错误SDL2
- 如何选择DirectX像素格式
- 如何使用 Windows API 获取像素格式布局
- OpenGL从4*浮点格式(C++)上传像素数据
- 通过 C/C++ 使用 JPEG 像素格式在 v4l2 中设置/获取相机 JPEG 压缩质量
- 将用于绘制为位图的像素格式更改
- 以在编译时和运行时都可用的方式描述C++像素格式信息
- 奇怪的SDL_Surface->格式->字节每像素值
- 如何在libavcodec中设置解码像素格式
- SDL2 纹理的像素格式和表面颜色遮罩
- 将 QImage 转换为YUV420P像素格式
- OpenGL上下文创建从不选择像素格式