CxImage 结合OpenGL抓屏

Posted on 2008-11-21 17:14 美洲豹 阅读(1068) 评论(0)  编辑 收藏 引用
 

现学现卖之结合CxImageOpenGL进行抓屏

Jingwenlai 2008-11-21

 

因为急着要将运行结果弄出来,而现在要做视频的话,不能像之前用Windows 内部的抓屏方法来抓屏,需要靠程序内部控制,在运行了一帧之后输出一幅图片,再运行再输出图片,到后面再看有无工具将这些图片连成一个视频(以前看到过有,但是忘记叫什么名字了)

先用windowsBITMAP的方法未弄成功,后来搜了一下,发现CxImage结合OpenGL的方法挺简单的,就弄了一个。

CxImage下载: http://www.xdp.it/download.htm

抓屏的代码如下:

 1 void CAppController::snapshot()
 2 {
 3     static int count = 0;
 4 
 5     int expand = 0;
 6     int width = FLTKCGALUI::getGLWindow()->getViewport()->Width();
 7     int height = FLTKCGALUI::getGLWindow()->getViewport()->Height();
 8     if((width*3)%4)
 9         expand = 4-(width*3)%4;
10     int mapSize = (width*3+expand)*height;
11     if(mapSize == 0)    return;
12     unsigned char * pTmp = new BYTE[mapSize];
13 
14     if(!pTmp) return;
15     glReadBuffer(GL_BACK); //不用此行也可抓屏
16     glPixelStorei(GL_UNPACK_ALIGNMENT,1);
17     glReadPixels(0,0,width,height,GL_BGR_EXT,GL_UNSIGNED_BYTE,pTmp);
18     const char * filename;
19     sprintf(filename,"snapshot-%d.jpg",count++);
20     CxImage image;
21     image.CreateFromArray(pTmp,width,height,24,width*3+expand,false);
22     image.SetJpegQuality(98);
23     image.Save(filename,CXIMAGE_FORMAT_JPG);
24 
25     delete [] pTmp;
26 }
27 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 15, comments - 2, trackbacks - 0, articles - 29

Copyright © 美洲豹