有时候我们需要把 OpenGL 中渲染出来的图像截下来。首先获取窗口的宽和高:
GetClientSize(&w, &h);
然后检查宽度是否是 4 的倍数,如果不是则要把它变成 4 的倍数,比如:
if
((w
%
4
)
!=
0
)
{
dw = 4 - w % 4 ;
w = w + dw;
}
{
dw = 4 - w % 4 ;
w = w + dw;
}
因为 OpenGL中的数据是以 4 字节为单位对齐的,如果不这样做的话就得不到正确的图像。运气好的话还可以得到下图,运气不好的话程序就直接崩溃。
新建一个区域保存图像数据。
imgBuffer
=
(unsigned
char
*
)malloc(w
*
h
*
3
);
再从 OpenGL 缓冲区中读取数据。
glReadPixels(
0
,
0
, w, h, GL_RGB, GL_UNSIGNED_BYTE, imgBuffer);
然后就可以把这些数据保存成需要的图像文件格式了。但是刚才把宽度扩展为 4 的倍数之后,在图像右边会有一条黑带(或者是其它颜色),还需要做相应的处理才能得到完美的图像。最后结果如下图。