0

由于是新手,我只能有两个链接,不能发布我的图片。很抱歉不得不复制+粘贴地址给您带来不便

我正在解析一个 Targa (.tga) 图像文件,其代码类似于steinsoft.net/index.php?site=Programming/Code%20Snippets/Cpp/no8

将数据检索到 unsigned char 数组后,我将其打印到日志中以手动检查。无论出于何种原因,似乎都没有解析较深的颜色。


简单的打印代码

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])存在。

有没有人知道为什么会发生这种情况?


眼镜

视窗

微软 Visual C++ 2010 专业版

Targa 保存为 24 位未压缩。

4

1 回答 1

1

首先,为什么要检查data[i]==NULL? 可能有 0 像素(黑色),所以将它们全部保留。您基本上检查颜色是否为 0,然后退出循环。无论值如何,只需读取所有像素。

于 2011-07-04T06:17:28.873 回答