玩极品飞车18地图加载9的时候我载了图,是TGA格...

Tga图片格式分析以及程序实现 - CSDN博客
Tga图片格式分析以及程序实现
本文转自本人Blog:
继位图之后,我们来看看图片的格式,以及程序实现。
文件格式
常见的格式有非压缩和压缩两种格式,其他格式的我们在这里不做讲述。文件的第三个位作为标记:为非压缩格式,为压缩格式。它们的具体格式如下:
非压缩格式
图片类型:非压缩格式
图像信息字段长度
本字段是字节无符号整型,指出图像信息字段(见本子表的后面)长度,其取值范围是到,当它为时表示没有图像的信息字段。
颜色表类型
表示没有颜色表,表示颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。
图像类型码
该字段总为,这也是此类型为格式的原因。
颜色表规格字段
颜色表首址
颜色表首的入口索引,整型(低位-高位)
如果颜色表字段为,则忽略该字段
颜色表的长度
颜色表的表项总数,整型(低位高位)
颜色表项位数
位数(),代表位,代表位,代表位
图像规格字段
图像坐标起始位置
图像左下角坐标的整型(低位高位)值
图像坐标起始位置
图像左下角坐标的整型(低位高位)值
以像素为单位,图像宽度的整型(低位高位)
以像素为单位,图像宽度的整型(低位高位)
图像每像素存储占用位数
它的值为,或等等。决定了该图像是,等等。
图像描述符字节
每像素对应的属性位的位数;
对于,该值为或,对于,该值为,对于,该值为。
保留,必须为
屏幕起始位置标志
原点在左下角
原点在左上角
对于图像必须为
交叉数据存储标志
两路奇偶交叉
图像信息字段
包含一个自由格式的,长度是图像由“图像信息字段”指定。它常常被忽略(即偏移处值为),注意其最大可以含有个字符。如果需要存储更多信息,可以放在图像数据之后。
颜色表数据
如果颜色表类型为,则该域不存在,否则越过该域直接读取图像颜色表规格中描述了每项的字节数,为,,之一。
颜色数据,存放顺序为:
压缩格式
图片类型:压缩格式
图像信息字段长度
本字段是字节无符号整型,指出图像信息字段(见本子表的后面)长度,其取值范围是到,当它为时表示没有图像的信息字段。
颜色表类型
表示没有颜色表,表示颜色表存在。由于本格式是无颜色表的,因此此项通常被忽略。
图像类型码
该字段总为,这也是此类型为格式的原因。
颜色表规格字段
颜色表首址
颜色表首的入口索引,整型(低位-高位)
如果颜色表字段为,则忽略该字段
颜色表的长度
颜色表的表项总数,整型(低位高位)
颜色表项位数
位数(),代表位,代表位,代表位
图像规格字段
图像坐标起始位置
图像左下角坐标的整型(低位高位)值
图像坐标起始位置
图像左下角坐标的整型(低位高位)值
以像素为单位,图像宽度的整型(低位高位)
以像素为单位,图像宽度的整型(低位高位)
图像每像素存储占用位数
它的值为,或等等。决定了该图像是,等等。
图像描述符字节
每像素对应的属性位的位数;
对于,该值为或,对于,该值为,对于,该值为。
保留,必须为
屏幕起始位置标志
原点在左下角
原点在左上角
对于图像必须为
交叉数据存储标志
两路奇偶交叉
图像信息字段
包含一个自由格式的,长度是图像由“图像信息字段”指定。它常常被忽略(即偏移处值为),注意其最大可以含有个字符。如果需要存储更多信息,可以放在图像数据之后。
颜色表数据
如果颜色表类型为,则该域不存在,否则越过该域直接读取图像颜色表规格中描述了每项的字节数,为,,之一。
采用压缩后的颜色数据。
的压缩算法采用了算法,算法的基本思想是将数据分为两大类:
:连续的不重复字节
:连续的重复字节
算法应用于格式的图片压缩中,则把数据分为:
:连续的不重复像素颜色值
:连续的重复像素颜色值
然后将数据按这两类数据分成若干长度不相等数据块,每个数据块的开始都是一个个字节长度的(在纯数据压缩中位个字节位),后面紧跟着数据块,如下。
(个字节)
每个的第一位作为标记:表示类颜色数据,表示类颜色数据。剩下的位意义如下:
对于类数据:表示有多少个像素的颜色值。取值,表示个像素,所以最多为个像素,块则为这些不重复的像素颜色值。
对于类数据:表示有多少个像素具有相同的颜色值。取值,表示个像素,所以最多为个像素,仅包含一个像素的颜色值,即为重复的那个颜色值。
关于代码的实现,可以参考本文后面的“程序实现”部分的代码。
好了,弄清楚了文件格式后,编写程序就不是个难事清了。为了读取方便,我定义了结构体来表示文件头:
文件头信息
获取图像规格信息
读取图片信息字段
读取图片数据
对于非压缩格式(),我们可以直接读取:
对于压缩格式(),我们要按照算法解码:
同位图一样,如果想把用于,需要做行对齐处理,而却文件里的数据是没有行对齐的,所以加载必须程序进行行对齐。行对齐的方法如下:
:计算图片行对齐前每行的字节数:
:计算行对齐后的字节数:
:如果=则不需要对齐
:否则在每行的后面添加-个字节,并以填充。
文件存储颜色数据的格式为,如果需要得到格式的数据(如中)需要做转换。
本文已收录于以下专栏:
相关文章推荐
首先是了解opengl里AUX_RGBImageRec的定义,它包含图片宽高和数据
typedef struct _AUX_RGBImageRec {
GLint sizeX,sizeY;...
http://blog.csdn.net/xiajun/article/details/7646058
TGA格式图像是游戏中十分常见的一种图像格式,所以有必要了解其内部格式以...
Tga常见的格式有非压缩RGB和压缩RGB两种格式,文件的第三个Byte位作为标记:2为非压缩RGB格式,10为压缩RGB格式。这里的类只实现读取非压缩格式的tga文件。先给出tga文件的文件格式:名...
自己编写一个读取TGA文件的类
TGA文件,也就是Targa文件,是一种图片的格式,在游戏和绘图领域中用得比较广泛。TGA文件是位图文件,存储着各...
作为一个游戏客户端程序员,需要对图像处理有一定的知识。
CxImage是C++实现的功能强大的、能处理多种文件格式的图像管理类。它能够简单快速的实现图像的导入、保存、显示和变换。同时又具有平台无关...
本文转自本人Blog: 继位图之后,我们来看看Tga图片的格式,以及程序实现。 一、
文件格式Tga常见的格式有非压缩RGB和压缩RGB两种格式,其他格...
Windows系统下的标准位图格式,未经过压缩,一般图像文件会比较大。在很多软件中被广泛应用.所以编程的时候用opencv,是不是首先应该考虑BMP格式会比较好,因为看到很多大神的源...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

参考资料

 

随机推荐