您的位置:首页 > 其它

第二人生的源码分析(五十四)纹理图片的格式之LLImageTGA类

2008-05-06 20:46 465 查看
前面介绍了JPEG2000的图片格式,下面介绍LLImageTGA类的格式。TGA(Tagged Graphics)文件是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。现在已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga。TGA的结构比较简单,属于一种图形、图像数据的通用格式,目前大部分文件为24位或32位真彩色,在多媒体领域有着很大影响。由于Truevision公司推出TGA的目的是为了采集、输出电视图像,所以TGA文件总是按行存储、按行进行压缩的,这使得它同时也成为计算机生成图像向电视转换的一种首选格式。

LLImageTGA类声明如下:
#001 class LLImageTGA : public LLImageFormatted
#002 {
#003 protected:
#004 virtual ~LLImageTGA();
#005
#006 public:
#007 LLImageTGA();
#008 LLImageTGA(const LLString& file_name);
#009

下面是更新数据。
#010 /*virtual*/ BOOL updateData();

下面把TGA格式解码为RAW数据格式。
#011 /*virtual*/ BOOL decode(LLImageRaw* raw_image, F32 decode_time=0.0);

下面把RAW格式的数据压缩成TGA的方式。
#012 /*virtual*/ BOOL encode(const LLImageRaw* raw_image, F32 encode_time=0.0);
#013
#014 BOOL decodeAndProcess(LLImageRaw* raw_image, F32 domain, F32 weight);
#015
#016 private:

下面不同的解码实现。
#017 BOOL decodeTruecolor( LLImageRaw* raw_image, BOOL rle, BOOL flipped );
#018
#019 BOOL decodeTruecolorRle8( LLImageRaw* raw_image );
#020 BOOL decodeTruecolorRle15( LLImageRaw* raw_image );
#021 BOOL decodeTruecolorRle24( LLImageRaw* raw_image );
#022 BOOL decodeTruecolorRle32( LLImageRaw* raw_image, BOOL &alpha_opaque );
#023
#024 void decodeTruecolorPixel15( U8* dst, const U8* src );
#025
#026 BOOL decodeTruecolorNonRle( LLImageRaw* raw_image, BOOL &alpha_opaque );
#027
#028 BOOL decodeColorMap( LLImageRaw* raw_image, BOOL rle, BOOL flipped );
#029
#030 void decodeColorMapPixel8(U8* dst, const U8* src);
#031 void decodeColorMapPixel15(U8* dst, const U8* src);
#032 void decodeColorMapPixel24(U8* dst, const U8* src);
#033 void decodeColorMapPixel32(U8* dst, const U8* src);
#034

下面从磁盘加载TGA文件。
#035 bool loadFile(const LLString& file_name);
#036
#037 private:

以下是压缩和解码使用到成员变量。
#038 // Class specific data
#039 U32 mDataOffset; // Offset from start of data to the actual header.
#040

文件头的信息。
#041 // Data from header
#042 U8 mIDLength; // Length of identifier string
#043 U8 mColorMapType; // 0 = No Map
#044 U8 mImageType; // Supported: 2 = Uncompressed true color, 3 = uncompressed monochrome without colormap
#045 U8 mColorMapIndexLo; // First color map entry (low order byte)
#046 U8 mColorMapIndexHi; // First color map entry (high order byte)
#047 U8 mColorMapLengthLo; // Color map length (low order byte)
#048 U8 mColorMapLengthHi; // Color map length (high order byte)
#049 U8 mColorMapDepth; // Size of color map entry (15, 16, 24, or 32 bits)
#050 U8 mXOffsetLo; // X offset of image (low order byte)
#051 U8 mXOffsetHi; // X offset of image (hi order byte)
#052 U8 mYOffsetLo; // Y offset of image (low order byte)
#053 U8 mYOffsetHi; // Y offset of image (hi order byte)
#054 U8 mWidthLo; // Width (low order byte)
#055 U8 mWidthHi; // Width (hi order byte)
#056 U8 mHeightLo; // Height (low order byte)
#057 U8 mHeightHi; // Height (hi order byte)
#058 U8 mPixelSize; // 8, 16, 24, 32 bits per pixel
#059 U8 mAttributeBits; // 4 bits: number of attributes per pixel
#060 U8 mOriginRightBit; // 1 bit: origin, 0 = left, 1 = right
#061 U8 mOriginTopBit; // 1 bit: origin, 0 = bottom, 1 = top
#062 U8 mInterleave; // 2 bits: interleaved flag, 0 = none, 1 = interleaved 2, 2 = interleaved 4
#063
#064 U8* mColorMap;
#065 S32 mColorMapStart;
#066 S32 mColorMapLength;
#067 S32 mColorMapBytesPerEntry;
#068
#069 BOOL mIs15Bit;
#070
#071 static const U8 s5to8bits[32];
#072 };
#073

由于TGA格式是全部在第二人生里用程序实现的,并且压缩和解压的代码都比较大,这里就不一一列出来了。具体需要了解的,只要认真地读读代码就能看得很清楚了。当然在第二人生里支持的图片,不仅仅上面介绍的两种格式类,还有很多,比如:LLImageBMP类、LLImageJPEG类、LLImageDXT类、LLImagePNG类,实现这些类都是在工程llimage里。到这里就把纹理图片的格式介绍完了,下一次开始新内容的探索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐