[OpenGL] 获取画布背景的位图数据

原创 2017年04月01日 18:11:21

用OpenGL绘制好画面后 可以将画面数据保存成位图

本文给出一个获取位图数据的函数:

// get data of canvas rendered with OpenGL
// note : need to call delete[] for *pData
bool CaptureOpenGL(int& nWidth, int& nHeight, int& nPitch, BYTE** pData)
{
	static GLenum s_Format = GL_BGRA_EXT;
	static int s_nBytePerPixel = 4; // 4Byte : because pixel format is GL_BGRA_EXT

	nWidth = nHeight = nPitch = 0;
	*pData = NULL;

	GLint aViewport[4];
	glGetIntegerv(GL_VIEWPORT, aViewport);

	int width = aViewport[2];
	int height = aViewport[3];			 
	if ((width * height) <= 0)
		return false;
				
	int pitch = width * s_nBytePerPixel;
	int len = pitch * height;			 
	BYTE* pBuffer = new BYTE[len];
	if (!pBuffer)
		return false;
				 
	glPixelStorei(GL_PACK_ALIGNMENT, 1);
	glPixelStorei(GL_PACK_ROW_LENGTH, 0);
	glPixelStorei(GL_PACK_SKIP_ROWS, 0);
	glPixelStorei(GL_PACK_SKIP_PIXELS, 0);

	GLenum lastBuffer;
	glGetIntegerv(GL_READ_BUFFER, (GLint*)&lastBuffer);
	glReadBuffer(GL_FRONT);
	glReadPixels(0, 0, width, height, s_Format, GL_UNSIGNED_BYTE, pBuffer);
	glReadBuffer(lastBuffer);
					 
	// reset value of alpha channel with 255. because sometimes the value is 0, such as CS1.6			 
	CWindowTool::ResetAlpha(pBuffer, len, 255); // this function should be completed by yourself

	nWidth = width;
	nHeight = height;
	nPitch = pitch;
	*pData = pBuffer;

	return true;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/felicityWSH/article/details/68946976

OpenGL中显示背景贴图

转载请声明出处: 导言: 通常在OpenGL里面绘制的都是默认的黑色背景,对于有些时候,太过于单调了,现在我们可以对它加上背景,实现一个不错的图形. 在网上看到人家要实现星空图,找到一张星空图片贴在背...
  • xiaoge132
  • xiaoge132
  • 2016-05-19 00:20:24
  • 5662

使用glfw库将OpenCV读取到的图片作为OpenGL的背景纹理贴图

转载请注明出处:http://my.csdn.NET/ye_shen_wei_mian 前段时间接触过一点glfw,个人而言不太喜欢freeglut的回调机制,glfw不失为一个可以替代的选择。 ...
  • ye_shen_wei_mian
  • ye_shen_wei_mian
  • 2017-06-23 17:29:22
  • 592

opengl es中读取缓存中的内容

-(void)ReadPixels{ GLenum readType, readFormat; GLubyte *pixels; GLint width; GLint height; glGetRen...
  • shaojieli
  • shaojieli
  • 2013-12-11 16:39:46
  • 1648

OpenGL ES 学习教程(十五) 从 颜色缓冲区(FBO的颜色附着)中 读取颜色数据 保存到图片(FreeImage)

GL中提供读取像素数据的API glReadPixels,方便实现游戏中截屏功能。
  • cp790621656
  • cp790621656
  • 2016-12-07 02:39:47
  • 1715

opengl入门例题(读取bmp图片,并显示)

#include #define FileName "bliss.bmp" static GLint imagewidth; static GLint imageheight; static ...
  • xuexiaokkk
  • xuexiaokkk
  • 2015-09-24 13:21:18
  • 5588

位图、图像(openGL)

0.概述 相对于几何图元而言的;opengl除了可以处理几何图元外,还可以处理位图和图像。位图和图像数据都是采用矩阵的像素数组的格式,它们之间的唯一区别在于位图的每一个像素是由一个位的信息组成的,...
  • ChinaJane163
  • ChinaJane163
  • 2016-01-05 14:17:13
  • 2108

HTML5 Canvas 初步:字符串,路径,背景,图片

HTML5中新增了画布标签,通过它,可以使用JavaScript在网页中绘制图像。标签在网页中得到的是一个矩形空白区域,可以通过width和height属性来调整其宽和高。创建一个Canvas画布的方...
  • sadfishsc
  • sadfishsc
  • 2011-10-14 15:17:31
  • 28153

android自定义控件画布canvas背景色失效变黑色

错误示范: *********************************************************************************************...
  • seashine_yan
  • seashine_yan
  • 2017-04-13 10:10:19
  • 3089

OpenGL-纹理读取BMP图片-代码

使用两种方法读取bmp图片,来作为OpenGL纹理。 1.通过对bmp格式的了解,http://blog.csdn.net/o_sun_o/article/details/8351037(详细解析b...
  • bigmoyu
  • bigmoyu
  • 2017-07-21 10:52:32
  • 409

获取位图尺寸

获取位图尺寸从 CBitmap类对象中获取位图尺寸我们可用GetBitmap()函数 。 // 变量bitmap是一个CBitmap类对象BITMAP bm;bitmap.GetBitmap( &bm...
  • teshorse
  • teshorse
  • 2006-11-26 02:39:00
  • 3872
收藏助手
不良信息举报
您举报文章:[OpenGL] 获取画布背景的位图数据
举报原因:
原因补充:

(最多只允许输入30个字)