Чтение файла Targa. Не хватает темных цветов?

Из-за того, что я новичок, я могу иметь только две ссылки и не могу публиковать свои изображения. Приносим извинения за неудобства, связанные с копированием и вставкой адресов

Я разбираю файл изображения Targa (.tga) с кодом, аналогичным тому, который находится на странице steinsoft.net/index.php?site=Programming/Code%20Snippets/Cpp/no8.

После извлечения данных в массив беззнаковых символов я распечатываю их в журнале для проверки вручную. Кажется, что более темные цвета по какой-то причине не анализируются.


Простой код печати

file.open( save );

//using while( tga.data[ i ] != NULL ) resulted in ~400,000 lines of garbage being appended
for( unsigned i = 1; i <= ( tga.width * tga.height * tga.byteCount ); i++ )
{
    if( tga.data[ i ] == NULL )
        break;

    file << ( int )tga.data[ i ] << ",";

    if( ( i % 3 ) == 0 )
        file << "\n";
}

file.close( );

Пример

Темный: http://i.stack.imgur.com/qefIA.png: http://pastebin.com/8JeJwP2w

Свет: http://i.stack.imgur.com/XNTIK.png: http://pastebin.com/s2sW0XfM

Как видите, линия в верхней части изображения не отображается, когда она темного цвета (в данном случае черная), но присутствует, когда она светлая (розовая [255, 53, 204]).

У кого-нибудь есть информация о том, почему это может происходить?


Характеристики

Виндоус виста

Microsoft Visual С++ 2010 профессиональный

Тарга сохраняется как 24-битная НЕ сжатая.


person ssell    schedule 04.07.2011    source источник


Ответы (1)


Прежде всего, почему вы проверяете, есть ли data[i]==NULL? Там может быть 0 пикселей (черный), поэтому оставьте их все. Вы в основном проверяете, равен ли цвет 0, а затем выходите из цикла. Просто прочитайте все пиксели независимо от значения.

person Anteru    schedule 04.07.2011
comment
о! Это было поздно ночью, и это даже не приходило мне в голову. Я просто не хотел, чтобы произошел сбой при доступе за пределы размера массива (хотя есть и лучшие способы сделать это). - person ssell; 04.07.2011