开始前,先看一下这几个概念:
帧缓冲区:计算机显存储器的一部分,存放屏幕图像的内容。FrameBuffer是内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它堪称显示内存的一个映像,将映射到进程地址空间后,就可以直接进行读写操作,而写操作可以立刻反映在屏幕上。
光栅化:光栅化就是把几何数据和像素数据转换为片段的过程。每个片段方块对应于帧缓冲区的一个像素。把定点链接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式、直线的宽度、点的大小、着色模型以及用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度值。
卷积:是一种像素过滤器,用像素本身以及邻近像素的加权平均值来替换这个像素。卷积的应用例子包括模糊和锐化图像、查找图像边缘以及调整图像的对比度。
位图 和图像数据都采用矩形的像素数组格式。他们之间的一个区别就是位图的每个像素是由单个位的信息组成的,而图像的每个像素一般都包含好几段数据。另外,位图就像掩码一样,因为它们一般用于覆盖其他的图像。但是图像数据既可以简单地进行覆盖,也可以采用某种方法与帧缓冲区的数据进行混合。
OpenGL并不支持从文件读取像素和图像以及把像素和图像保存到文件中。
位图是由1和0组成的矩形数组,作为窗口中一个矩形区域的绘图掩码。 假设我们正在绘制一副位图,并且当前的光栅颜色是红色。在位图中为1的地方,帧缓冲区中的对应像素就用红色像素(或者根据实际生效的片段操作,与红色像素进行混合)代替。对于位图中为0的地方,就不会生成片段,像素的内容不受影响。位图的最常见用途就是在屏幕上绘制字符。
图像与位图相似,但是屏幕矩形区域中的每个像素并不是由1个位表示的。在图像中,每个像素刻个包含更多的信息。例如,图像的每个像素可以存储完整的颜色(R、G、B、A)。正常情况下,我们所想到的图像就是来自颜色缓冲区的图片。但是,也可以从深度缓冲区和模版缓冲区读取或写入矩形区域的像素数据。除了简单地显示在屏幕上之外,图像还可以用了纹理贴图。这种情况下,它们实际上是粘贴到按照正常方式在屏幕上所渲染的表变形的表面。
OpenGL提供3个基本的函数来操纵图像数据:
glReadPixels():从帧缓冲区读取一个矩形像素数组,并把数据保存在内存中。
glDrawPixels():把内存中保存的一个矩形像素数数组写入到帧缓冲区中由glRasterPos*()指定的当前位置。
glCopyPixels():把一个矩形像素数组从帧缓冲区的一个部分复制到另一部分。这个函数的行为类似在调用glReadPixels()之后再调用glDrawPixels(),但是数据并不会写到内存中。
来源:https://www.cnblogs.com/wendao/archive/2011/12/23/ogl_bitmap_image_learning.html