OpenGL 入门学习之十——BMP 文件与像素操作2009-01-07 12:03学过多媒体技术的朋友可能知道,计算机保存图象的方法通常有两种:一是“矢量图”,一是“像素图”
矢量图保存了图象中每一几何物体的位置、形状、大小等信息,在显示图象时,根据这些信息计算得到完整的图象
“像素图”是将完整的图象纵横分为若干的行、列,这些行列使得图象被分割为很细小的分块,每一分块称为像素,保存每一像素的颜色也就保存了整个图象
这两种方法各有优缺点
“矢量图”在图象进行放大、缩小时很方便,不会失真,但如果图象很复杂,那么就需要用非常多的几何体,数据量和运算量都很庞大
“像素图”无论图象多么复杂,数据量和运算量都不会增加,但在进行放大、缩小等操作时,会产生失真的情况
前面我们曾介绍了如何使用 OpenGL 来绘制几何体,我们通过重复的绘制许多几何体,可以绘制出一幅矢量图
那么,应该如何绘制像素图呢
这就是我们今天要学习的内容了
1、BMP 文件格式简单介绍BMP 文件是一种像素文件,它保存了一幅图象中所有的像素
这种文件格式可以保存单色位图、16 色或 256 色索引模式像素图、24 位真彩色图象,每种模式种单一像素的大小分别为 1/8 字节,1/2 字节,1 字节和 3 字节
目前最常见的是 256 色 BMP 和 24 位色 BMP
这种文件格式还定义了像素保存的几种方法,包括不压缩、RLE 压缩等
常见的 BMP 文件大多是不压缩的
这里为了简单起见,我们仅讨论 24 位色、不使用压缩的 BMP
(如果你使用 Windows 自带的画图程序,很容易绘制出一个符合以上要求的 BMP)Windows 所使用的 BMP 文件,在开始处有一个文件头,大小为 54 字节
保存了包括文件格式标识、颜色数、图象大小、压缩方式等信息,因为我们仅讨论 24 位色不压缩的 BMP,所以文件头中的信息基