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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]