Win32 像素格式描述符学习
Posted bcbobo21cn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win32 像素格式描述符学习相关的知识,希望对你有一定的参考价值。
像素格式(PIXELFORMATDESCRIPTOR)明确了OpenGL绘制平面的特性,如象素缓冲区是单缓冲还是双缓冲,数据是 RGBA方式还是Color Index方式等。
每个OpenGL显示设备都支持一种指定的像素格式。一般用一个名为PIXELFORMATDESCRIPTOR的结构来表示某个特殊的像素格式,这个结构包含26个属性信息。Win32定义PIXELFORMATDESCRIPTOR如下所示:
typedef struct tagPIXELFORMATDESCRIPTOR
WORD nSize;
WORD nVersion;
DWORD dwFlags;
BYTE iPixelType;
BYTE cColorBits;
BYTE cRedBits;
BYTE cRedShift;
BYTE cGreenBits;
BYTE cGreenShift;
BYTE cBlueBits;
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
PIXELFORMATDESCRIPTOR;
前两个成员,结构体大小,版本;
第三个成员,多个标志 | 起来;
具体参阅:
https://docs.microsoft.com/en-us/previous-versions//ms537569(v=vs.85)?redirectedfrom=MSDN
bReserved只能设为0,
最后三个变量Windows 95都不支持,故全设置为0;
The PIXELFORMATDESCRIPTOR structure describes the pixel format of a drawing surface.
像素格式描述符结构体描述了一个绘图表面的像素格式。
iLayerType
Ignored. Earlier implementations of OpenGL used this member, but it is no longer used.
倒数第五个成员;早期OpenGL版本使用这个成员,它已不再使用;
VC++ 2012,新建一个单文档工程;
先初始化此结构体;把返回地址选择进设备描述表;然后才能进行后续的绘图;
看一下是否初始化成功;把相关返回值输出一下;
void CpixeltestView::OnDraw(CDC* pDC)
CpixeltestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
CDC* pmyDC;
CString str1;
PIXELFORMATDESCRIPTOR pfd =
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,0,0,0,0,0,
32,
0,0,
PFD_MAIN_PLANE,
0,
0,0,0
;
str1.Format(_T("%x"), pfd);
pDC->TextOutW(50, 50, str1);
pmyDC = new CClientDC(this);
int pixelFormat = ChoosePixelFormat(pmyDC->GetSafeHdc(), &pfd);
str1.Format(_T("%x"), pmyDC);
pDC->TextOutW(50, 80, str1);
str1.Format(_T("%d"), pixelFormat);
pDC->TextOutW(50, 110, str1);
运行如下;
以上是关于Win32 像素格式描述符学习的主要内容,如果未能解决你的问题,请参考以下文章
lcd中像素深度bpp和像素格式(比如RGB,YUV)的关系