Запись tga файла

Я не понимаю, когда мы пишем заголовок tga, почему мы делаем что-то подобное, чтобы указать размеры изображения:

    header[12] =(width & 255);
    header[13] =(width>>8 );

заранее спасибо


person Pépito    schedule 16.03.2014    source источник
comment
Непонятно, что вы здесь спрашиваете.   -  person OMGtechy    schedule 17.03.2014
comment
Здесь вы можете посмотреть, как я борюсь с этим: , а затем вы можете посмотреть, как это сделать на самом деле, здесь: stackoverflow.com/questions/20595340/   -  person Brandon    schedule 17.03.2014


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

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

person marcinj    schedule 16.03.2014
comment
+1 Хороший ответ. Мелкая гнида: so this way of writing width makes this format platform independent. Это делает код независимым от платформы, формат уже есть ;). - person Till; 17.03.2014