您的位置:首页 > 运维架构

在 OpenGL 的显示窗口中截图

2008-03-08 14:46 232 查看
有时候我们需要把 OpenGL 中渲染出来的图像截下来。首先获取窗口的宽和高:

GetClientSize(&w, &h);

然后检查宽度是否是 4 的倍数,如果不是则要把它变成 4 的倍数,比如:

if ((w % 4) != 0)
{
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 的倍数之后,在图像右边会有一条黑带(或者是其它颜色),还需要做相应的处理才能得到完美的图像。最后结果如下图。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: