写一个tga文件

时间:2014-03-16 21:30:17

标签: c++ header tga

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

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

提前致谢

1 个答案:

答案 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之后反转短值和长值的字节顺序   文件已被阅读

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