Я не понимаю, когда мы пишем заголовок tga, почему мы делаем что-то подобное, чтобы указать размеры изображения:
header[12] =(width & 255);
header[13] =(width>>8 );
заранее спасибо
Я не понимаю, когда мы пишем заголовок 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, потребуется инвертировать порядок байтов для коротких и длинных значений после того, как файл будет прочитан.
так что этот способ написания ширины делает вашу кодовую платформу независимой.
so this way of writing width makes this format platform independent.
Это делает код независимым от платформы, формат уже есть ;).
- person Till; 17.03.2014