OpenGL学习二十四:绘制像素,位图,图像
??????????????
?
绘制位图
glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
xorig,yorig定义了光栅的原点,它根据当前光栅位置确定的,正值在当前光栅的上面和右面,负值在当前的下面和左面
xmove,ymove表示位图光栅化后光栅位置的增加量
说明:如果位图信息数据包含N个字节,位图高度为M,那么每行所包含的字节数为n/m根据此内容渲染位图0,1 来达到期望的效果
?
图像
void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
从帧缓冲区读取一个矩形像素数组,并把数据保存在内存中
glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
把内存中保存的一个矩形像素数组写入到帧缓冲区中由glRasterPos指定的当前位置
glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum buffer);
从帧缓冲区读取一个矩形像素数组,并把数据保存在内存中
buffer:GL_DEPTH(GL_DEPTH_COMPONENT)
??????? GL_STENCIL(GL_STENCIL_INDEX)
??????? GL_COLOR(GL_RGBA或GL_COLOR_INDEX)
?
放大,缩小或旋转图像
void glPixelZoom(Glfloat zoomx,Glfloat zoomy)
设置像素的写入操作glDrawPixels,glCopyPixels中x,y方向的放大或缩小因子,默认值都是1.0,如果它们都是2.0,图像每个像素被绘制4个屏幕像素,可以使用负的缩放因子,负的缩放因子根据当前光栅位置对图像进行翻转。正常图片是自底向上,从左到用,如果Y为负数,图像映射到屏幕上就是自顶向下的
?glRasterPos2i(0, 0);
?? //glPixelZoom (2, 2);//1
?? glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB,? GL_UNSIGNED_BYTE, checkImage);
?? //glPixelZoom (1, 1);//2
?? glRasterPos2i (250, 0);
?glCopyPixels(0,0,checkImageWidth,checkImageHeight,GL_COLOR);
左边的图为glDrawPixels,右边的图是glCopyPixels
将1,2处解开,可见DrawPixels大小放大2*2倍,glCopyPixels在2*2倍 再次放大1*1倍
将1,2处解开,可见DrawPixels大小放大2*2倍,glCopyPixels在2*2倍 再次放大1*1倍
由此可见不显示调用glPixelZoom (1, 1),默认与使用原来放大倍数再次放大
?
?