image - .tga 图像:应该由一个单词表示的值只有在我阅读前半个单词时才是正确的
问题描述
我有以下问题:我正在尝试读取 tga 文件的标题,因此我在Wikipedia上获取了 tga 文件的结构:它说图像宽度和高度存储为一个单词或 2 个字节标题中的数据。但后来我查看了 tga 文件头的十六进制代码(前 18 个字节):
00 00 02 00 00 00 00 00 00 00 00 00 20 00 20 00 20 08
这里最后的第三和第二个词是宽度和高度。所以根据这个我的 tga 文件应该是 8.192px 宽和 8.192px 高(0x2000),但实际上图像只有 32px 宽和 32px 高(0x20 - 第一个字节)。
你对此有什么解释吗?
解决方案
让我们在 Terminal 中使用ImageMagick制作一个 513px 宽和 32px 高的图像,然后进行十六进制转储:
magick -size 513x32 xc:red tga: | xxd -c 16
我们得到了这个:
根据您的维基百科链接。字段如下:
- 红色 - 字段 1 - ID 长度
- 绿色 - 字段 2 - 颜色图类型
- 蓝色 - 字段 3 - 图像类型
- 青色 - 字段 4 - 颜色映射规范
- 洋红色 - x,y 原点 - [0,0]
- 黄色 - 宽度
- 白色 - 高度
所以,让我们看看宽度。我将其设为 513 像素,即 2 x 256 + 1。因此,希望您能看到 Targa 规范是little-endian,其中最低有效字节排在第一位,而更高有效字节排在第二位。这意味着小0102
的1
、微不足道的字节和 2*256 大的、胖的字节。同样,20000
对于高度意味着 2 批 16 个小字节和零批大的胖字节。
TLDR:Targa 格式是小端格式。最不重要的字节首先出现,然后是更重要的更大字节。
推荐阅读
- css - 基础 scss 文件未在我的反应项目的 App.scss 文件中导入
- android - 文字转语音重启
- multithreading - 为什么使用协程阻塞线程时会执行代码?
- javascript - Puppeteer:获取不在初始 DOM 中的 DOM 元素
- node.js - Icecast:我有奇怪的行为,重复曲目结束,以及我的 Icecast 服务器的音高变化
- python - Python: Why does my script on selenium only work if I am with that specific chrome tab open
- javascript - 从选择框中选择一个值后如何显示隐藏的文本?
- api - 在 alexa timer api 关闭后,有什么方法可以让会话保持打开状态?
- c# - Lucene:获取对文档分数影响最大的字段
- javascript - 函数作用域是否针对异步事件和快速连续函数调用中所做的更改“锁定”一个值?