我不明白,当我们编写一个tga标题时,为什么我们要做这样的事情来放置图片的尺寸:
header[12] =(width & 255);
header[13] =(width>>8 );
提前致谢
答案 0 :(得分:1)
TGA宽度和高度写为两个字节,我假设header
的类型为:
unsigned char header[HEADER_SIZE];
然后要正确写width
,我认为类型为int
,你必须在索引12的低字节(最低有效字节)宽度值和索引13高位字节(最高有效字节) )宽度的一部分。
因此,如果宽度为1023,则二进制为:1111111111
,因此在标题[12]中,您需要将1023 & 255
11111111
放在二进制文件中,并放在标题[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文件 约定(最低有效字节优先,最高有效字节最后)。 因此,在基于Motorola的系统上运行的应用程序将会 需要在a之后反转短值和长值的字节顺序 文件已被阅读
所以这种写宽度的方式使你的代码平台独立。