在 OpenGL 的显示窗口中截图

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值