// // TGA是一种简单、无损的图像数据文件编码格式,支持RLE(Run-Length // Encoding,行程长度编码)压缩算法,这是一种简单的压缩算法,通过 // 将连续重复的数据编码为[repeat bit, num-1, ARGB]的形式来实现压缩。 // 数据字节序为小端模式 // // 文件结构解析: // size(byte) // +--------------------------+ // 1 | ID Length (offset=0) | 字段1:表示字段6的长度byte // +--------------------------+ // 1 | Color Map Type (1) | 字段2:颜色表类型,0-不使用颜色表,1-使用颜色表,(2-255未定义) // +--------------------------+ // 1 | Image Type (2) | 字段3:图像类型,0-无图像数据,1-未压缩,颜色表映射图像,2-未压缩,真彩图像,3-未压缩,黑白图像 // | | 9-行程编码,颜色表映射图像,10-行程编码,真彩图像,11-行程编码,黑白图像 // +--------------------------+ // 5 | Color Map Specification (3) 字段4:颜色表说明,2byte颜色表首地址(索引),2byte颜色表长度(元素个数),byte每一个颜色大小15、16、24、32位 // +--------------------------+ // 10 | Image Specification (8) | 字段5:图像说明,2byte图像原点坐标X,2byte图像原点坐标Y,2byte图像宽度,2byte图像高度,byte图像深度即每个像素占用位数(16,24,32位) // | | byte图像描述,0-3位表示alpha值占用的位数,4-5位标识原点位置,00左下,01右下,10左上,11右上 // +--------------------------+ // from field 1 | Image ID | 字段6:由字段1决定该字段的长度,图像描述信息(ID) // +--------------------------+ // from field 4 | Color Map Data | 字段7:颜色表数据,长度由字段4决定,即元素个数 x 颜色大小 // +--------------------------+ // from field 5 | | 字段8:--图像数据--,这就是实际颜色数据所在的位置了,其长度由字段5决定,分为颜色索引与颜色值两种,颜色值顺序为ARGB(32位),RGB(24位),ARGB(16位) // | | 注意:因为字节序为小端模式,所以看起来颜色值顺序是反的BGRA(32位)BGR(24位) // | | 16位:每一个像素由2byte数据组成,其中每5位为一个颜色值,最高位为alpha值(这一个貌似很多软件都没有用,默认为0),当查看二进制数据时你需要将这2byte调换顺序才能看到正确结果) // | Image Data | 24位:每byte为一个颜色值(不含alpha)。32位:每byte为一个颜色值 // | | 压缩格式的图像颜色表示与非压缩一样,区别在于颜色值前可能会有一个压缩标识占1byte,其最高位0表示后续字节的颜色是不重复的,1表示后续字节的颜色值是重复的 // | | 压缩标识的其他位表示重复或不重复的次数-1(因为0算一次,1算两次) // +--------------------------+ // from field 29| Developer Fields | 字段9:开发者字段,偏移量(offset从顶部到这里的偏移字节)由字段29决定,该字段内容可以完全忽略 // +--------------------------+ // | Developer Directory | 字段10:开发者目录 // +--------------------------+ // 2 | Extension (local offset=0) 字段11:扩展区域,偏移量(offset从顶部到这里的偏移字节)由字段28决定,包含了众多该文件的信息 // +--------------------------+ // 41 | Author Name (2) | 字段12:(看字段名) // +--------------------------+ // 324 | Author Comments (43) | 字段13:(看字段名) // +--------------------------+ // 12 | Date/Time Stamp (367) | 字段14:(看字段名) // +--------------------------+ // 6 | Job Name/ID (397) | 字段15:(看字段名) // +--------------------------+ // 41 | Software ID (420) | 字段16:(看字段名) // +--------------------------+ // 3 | Software Version (467) | 字段17:(看字段名) // +--------------------------+ // 4 | Key Color (470) | 字段18:(看字段名) // +--------------------------+ // 4 | Pixel Aspect Ratio (474) | 字段19:(看字段名) // +--------------------------+ // 4 | Gamma Value (478) | 字段20:(看字段名) // +--------------------------+ // 4 | Color Correction Offset (482) 字段21:(看字段名) // +--------------------------+ // 4 | Postage Stamp Offset (486) 字段22:(看字段名) // +--------------------------+ // 4 | Scan Line Offset (490) | 字段23:(看字段名) // +--------------------------+ // 4 | Attributes Type (494) | 字段24:(看字段名) // +--------------------------+ // | Scan Line Table | 字段25:(看字段名),由字段23决定该字段的偏移位置 // +--------------------------+ // | Postage Stamp Image | 字段26:(看字段名),由字段22决定该字段的偏移位置 // +--------------------------+ // 2000 | Color Correction Table | 字段27:(看字段名),由字段21决定该字段的偏移位置 // +--------------------------+ // 4 | Extension Area Offset | 字段28:决定字段11的偏移位置(相对于顶部),如果为0,说明该字段不存在 // +--------------------------+ // 4 | Developer Directory Offset 字段29:决定字段9的偏移位置(相对于顶部),如果为0,说明该字段不存在 // +--------------------------+ // 16 | Signature | 字段30:TGA文件签名,一般以TRUEVISION开头,例如TRUEVISION-XFILE // +--------------------------+ // 1 | End Character | 字段31:TGA文件结束字符2E // +--------------------------+ // 1 | End Of File | 字段32:文件结束字符0 // +--------------------------+ // // tga图片解码的大致步骤如下: // . 验证文件签名,确定其是一个真正的TGA文件 // . 确定图像尺寸等信息 // . 计算图像数据字段位置,这需要根据前面字段的提示确定偏移量 // . 存储图像数据原始序列(未解码的byte序列),也可以不做这一步,直接对文件进行解码 // . 对图像数据原始序列进行解码,根据像素值大小(16,24,32位)和是否压缩来进行 // . 验证解码出来的图像数据是否正确 // //
讯享网
以下是4x4像素的32位非压缩格式2进制文件数据(未标注的是图像颜色数据),只包含文件头,尾,图像数据,一般tga文件都只包含这些信息

以下是4x4像素的32位压缩格式2进制文件数据


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/74198.html