-1

我不明白,当我们写一个 tga 标题时,为什么我们要这样做来放置图片的尺寸:

    header[12] =(width & 255);
    header[13] =(width>>8 );

提前致谢

4

1 回答 1

1

TGA 宽度和高度写成两个字节,我假设它header的类型是:

unsigned char header[HEADER_SIZE];

然后要正确写入width我认为的类型int,您必须将宽度的索引 12 低字节(最低有效字节)值和宽度的索引 13 高字节(最高有效字节)部分放入。

所以如果宽度是 1023 那么二进制是 : 1111111111,所以在 header[12] 你需要把1023 & 25511111111放在二进制中,在 header[13] 你放11

1023 = 11 11111111
          ^^^^^^^^-- header[12] =(width & 255); // 255 is 11111111, 
       ^^----------- header[13] =(width>>8 );

您实际上可以将上面重写为:

header[12] =(width % 256);
header[13] =(width / 256);

您不直接将整数写入标题的事实是因为可以在具有不同字节顺序的系统上读取 tga 文件,在其规范中您可以阅读:

3 字节排序 TGA 文件使用 Intel 字节排序约定存储(最低有效字节在前,最高有效字节在后)。出于这个原因,在基于摩托罗拉的系统上运行的应用程序需要在读取文件后反转短值和长值的字节顺序

所以这种写宽度的方式让你的代码独立于平台。

于 2014-03-16T22:14:14.520 回答