TGA文件分析

TGA文件格式概述【OpenGL】游戏编程常用TGA图像格式详解以及加载纹理编程实现分析TGA格式图片使用FlexHEX打开text.tgatest是用像素笔画出的4*4的图像,第一行为白色和三基色,第四行为三补色和黑色,其余两行为白色打开后可以看到结果十分简单:第一个字节是0,表示没有图像的信息字段第二个字节是0,表示没有颜色表第三个字节总是2,表示此类型为格式2接下来五个字节全为0,可以忽略第九第十个字节为0,表示图像X坐标起始位置为0(最左)第十一、十二个字节为0,表示图

大家好,又见面了,我是你们的朋友全栈君。

TGA文件格式概述

在这里插入图片描述
【OpenGL】游戏编程常用TGA图像格式详解以及加载纹理编程实现

分析TGA格式图片

使用FlexHEX打开text.tga

test是用像素笔画出的4*4的图像,第一行为白色和三基色,第四行为三补色和黑色,其余两行为白色
test是用像素笔画出的4*4的图像,第一行为白色和三基色,第四行为三补色和黑色,其余两行为白色

在这里插入图片描述
打开后可以看到结果十分简单:

  • 第一个字节是0,表示没有图像的信息字段
  • 第二个字节是0,表示没有颜色表
  • 第三个字节总是2,表示此类型为格式2
  • 接下来五个字节全为0,可以忽略
  • 第九第十个字节为0,表示图像X坐标起始位置为0(最左)
  • 第十一、十二个字节为0,表示图像Y坐标起始位置为0(最下)
  • 第十三、十四个字节为4,表示图像宽度为4——与设置吻合
  • 第十五、十六个字节为4,表示图像高度为4——与设置吻合
  • 第十七个字节为24,表示该图像为TGA24——与设置吻合,图像深度为24
  • 第十八个字节为0,是图像描述符字节,TGA24此字节为0

接下来有三个偏移量可变,长度不确定的区域:

  • 首先此文件颜色表类型为0,颜色表数据区域不存在
  • 从第十九字节开始三个三个看,FF00FF、00FFFF、FFFF00、000000,可以看出存储的是三补色以及黑色像素的数据。也就是说从第十九字节开始进入图像数据区域。
  • 要注意此文件的存储方式为从左到右、从下到上。即第一个存储的是最左下角像素的数据,依次往右存储,存完此行存上一行,存储的最后一个像素为最右上角的像素。
  • 计算4 * 4 * 3 = 48,往后数这么多个到第六十七个字节为下一区域,也就是图像信息字段区域

使用FlexHEX打开zoe.tga

在这里插入图片描述
zoe图像文件相较于test色彩丰富,文件也较大

在这里插入图片描述
下面分析zoe.tga与test.tga不同的部分:

  • 第十三、十四个字节为4,表示图像宽度为950
  • 第十五、十六个字节为4,表示图像高度为559
  • 第十九字节开始的图像数据区域三个三个看:08715E、09725F……
    验证确实是图像最左下角的像素颜色
    在这里插入图片描述
  • 后面都是各像素数据,图像信息字段区域在最后

总结和反思

  • 每遇到新的文件格式从最简单像素图开始分析,了解他的长宽、深度、存储方式,再慢慢分析复杂的文件
  • 对TGA的图像信息字段区域还需要进一步了解
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126395.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月7日 下午4:20
下一篇 2022年4月7日 下午4:20


相关推荐

  • Python 多进程实战 & 回调函数理解与实战[通俗易懂]

    Python 多进程实战 & 回调函数理解与实战

    2022年2月23日
    61
  • matlab Lasso回归

    matlab Lasso回归Lasso回归clc,clear;closeall;data=[1.541.611.621.661.711.721.731.861.9222.212.292.342.382.422.442.572.642.712.852.933.013.143.223.343.493.553.793.994.1220.120.120.320.420.420.520.620.720.921.121.321.521

    2022年5月22日
    94
  • 函数极限的定义

    函数极限的定义严格定义设函数y=f(x)y=f(x)y=f(x)在点x0x_0x0​的某个去心邻域内有定义,即存在ρ>0\rho>0ρ>0,使O(x0,ρ)\{x0}⊂Df\mathbf{O}(x_0,\rho)\backslash\{x_0\}\subsetD_fO(x0​,ρ)\{x0​}⊂Df​如果存在实数AAA,对于任意给定的ε>0\varepsilon>0ε>0,可以找到δ>0\delta>0δ>0,使得当0<∣x−x0∣

    2022年5月4日
    47
  • (C++)Shuffling Machine(思路与实现)

    (C++)Shuffling Machine(思路与实现)题目描述 Shufflingisa Becausestand andinorderto insidejobs whereemploye

    2026年3月18日
    2
  • 卷积和内积

    卷积和内积我是从支持向量机中领悟到內积运算与之前学过的卷积运算特别相似 搜索了一下 早有学者发现了这种相似 参考 卷积和內积信号处理中的一个重要运算是卷积 初学卷积的时候 往往是在连续的情形 两个函数 f x g x 的卷积 是 f u g x u du 当然 证明卷积的一些性质并不困难 比如交换 结合等等 但是对于卷积运算的来处 初学者就不甚了了 其实 从离散的情形看卷积 或许更加清楚 对于两个序

    2026年3月17日
    2
  • 什么叫构造方法?_构造方法和普通方法之间的区别

    什么叫构造方法?_构造方法和普通方法之间的区别构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重

    2022年8月4日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号