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