自己编写一个读取TGA文件的类

本文介绍了作者在了解TGA文件格式规范后,自己编写读取TGA文件类的过程。文章提及TGA文件在游戏和绘图领域的应用,以及在不同软件中创建的TGA文件可能存在的兼容性问题。作者详细探讨了TGA的RLE压缩、不同位深、索引功能和颜色映射域,并提供了部分代码示例,最终实现了在OpenGL环境下成功读取多种格式TGA文件的功能。
摘要由CSDN通过智能技术生成

自己编写一个读取TGA文件的类

TGA文件,也就是Targa文件,是一种图片的格式,在游戏和绘图领域中用得比较广泛。TGA文件是位图文件,存储着各个像素的颜色信息。本来想直接使用《OpenGL超级宝典》里面现成的TGA文件载入函数,然后修改成一个类,但遗憾的是,书上的代码并不适合于所有的TGA文件。有些由GIMPPhotoshop创建TGA文件无法载入。这真是让我感到不爽。好在自己有了几年的C/C++编程经验,通过上网查询TGA文件的格式规范,我终于了解到了TGA文件的奥秘。带着一份自信和一点探索精神,我用了大概一天的时间完成了TGA文件的读取。

首先我们看看GIMP中有关TGA文件格式的处理。


从上图我们可以知道,TGA分为RLE压缩和非RLE压缩,而且TGA文件的起始位置可以选择左下或者左上。RLE全称游程长度编码(RunLengthEncoded),它通过一种简单的算法来对颜色进行压缩。比如说『1,1,1,1,1,1』就可以表示为『6,1』,其中6表示循环的次数,1表示循环的值。这是一种非常简单的压缩算法。在我的资源中详细地讲述了如何解压缩RLE。如果你在Windows下安装了Photoshop,你会发现TGA文件可以保存为16bit24bit32bit三种类型。这些就是我们可以TGA文件的全部了。

可是TGA文件又远远不止这些,有些TGA文件具有索引的功能,也就是说图像数据保存的并不是颜色,而是索引。可以根据索引来确定每一个像素的颜色。一篇介绍TGA格式文件的说明中写道,TGA文件保存索引可以有效地节约空间,而这些颜色保存在一个颜色映射域(colormapfield)中。所以这无疑是给我们增添了读取的难度。说明只讨论了4种常用的TGA格式文件的读取方法。我就是以这个说明为基础来编写TGA格式文件的。下面是这个页面的截图:


我的源代码可以在这里找到,我用了《OpenGL超级宝典》的Pyramid例子来测试TGA文件的读取。我的开发环境是Ubuntu+QtCreator2.41。下面是例子的截图:


程序可以通过[w][s][a][d]键上下左右移动金字塔。当然这不是主要的,可以看到,这个图形可以顺利地载入TGA格式的文件。在我的资源中,我随意地创建了一个16bit16bitRLE24bit24bitRLE32bit32bitRLETGA图像,当你修改文件GLWidget.cpp文件第27行的文件名,可以试试其它格式的文件载入看看。


出于版面考虑,我只列出部分载入TGA

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值