在 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 的倍数之后,在图像右边会有一条黑带(或者是其它颜色),还需要做相应的处理才能得到完美的图像。最后结果如下图。
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 的倍数之后,在图像右边会有一条黑带(或者是其它颜色),还需要做相应的处理才能得到完美的图像。最后结果如下图。
相关文章推荐
- 在 OpenGL 的显示窗口中截图
- [OpenCV]在显示窗口中截图
- OpenGL设置窗口居中显示方法
- VS2012下基于Glut OpenGL显示一个窗口
- 【OpenGL】glViewport函数在同一窗口显示多个视图
- OpenGL/MFC下静态分割窗口显示PNG图片
- [OpenCV]在显示窗口中截图
- Qt自定义界面类并提升(提升的窗口部件),把OpenGL绘制的图形显示在QT的ui界面上
- 树莓派3b 远程桌面使用opencv窗口不能显示(Window system doesn't support OpenGL)
- opengl不显示调试窗口
- Qt自定义界面类并提升(提升的窗口部件),把OpenGL绘制的图形显示在QT的ui界面上
- opengl 001 显示一个带背景颜色的窗口
- [opencv&opengl]多窗口显示
- OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口
- Windows MFC 两个OpenGL窗口显示与线程RC问题
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
- OpenGL编程逐步深入(三)在窗口中显示一个三角形
- OpenGL控制台项目只显示Windows窗口
- OpenGL(二)之使用GLUT进行显示窗口管理
- Windows MFC 两个OpenGL窗口显示与线程RC问题