Я не понимаю, когда мы пишем заголовок tga, почему мы делаем что-то подобное, чтобы поместить размеры картинки:
header[12] =(width & 255);
header[13] =(width>>8 );
заранее спасибо
Ширина и высота 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 файлы хранятся с использованием порядка байтов Intel
условное обозначение (младший байт первый, старший значащий байт последний).
По этой причине приложения, работающие в системах на базе Motorola, будут
необходимо инвертировать порядок байтов для коротких и длинных значений после
файл был прочитан
так что этот способ записи ширины делает вашу платформу независимой.
Других решений пока нет …