Написание файла 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, должны будут инвертировать порядок байтов для коротких и длинных значений после чтения файла.

поэтому этот способ записи ширины делает вашу платформу независимой.

Другие вопросы по тегам