在Windows中用C ++编写带有透明色的8位png

时间:2013-09-03 13:53:29

标签: c++ visual-studio-2010 png transparency png-8

我有一些代码可以从侧扫描声纳数据中生成假彩色合成图像,我希望将其作为叠加层加载到Google地球中。我需要节省空间,所以8位PNG文件似乎是要走的路。我可以使用1个颜色表条目作为背景,255个作为我的假颜色表。

我看到以前的答案推荐了ATL库中的CImage类。所以我在这里查看MSDN文档(http://msdn.microsoft.com/en-us/library/5eb252d0(v=vs.100).aspx

它看起来很直接,所以我编写了这样的代码:

CImage Cimg;
Cimg.Create(width,height,8,0);

RGBQUAD ColorTable[256];
for(i=0;i<256;i++)
    // Fill table.
Cimg.SetTransparentColor(long(255));
Cimg.SetColorTable(0,256,Ctable);

// fill the pixel values.

Cimg.Save("TestFile.png",Gdiplus::ImageFormatPNG);

一切都或多或少地按预期工作,但颜色255只是另一种颜色。它根本不透明。

我知道这不是GoogleEarth的问题,因为我可以将文件加载到Paint Shop Pro并手动设置背景清晰,然后一切都很好。

我已经尝试将RGBQUAD表中的.rgbReserved字节设置为全零,255和一个斜坡,认为它可能被解释为Alpha值,但这没有效果。

我也尝试逐步执行CImage :: Save(),我确定它使用Gdiplus :: Bitmap :: Save()来使用“Built In PNG Encoder”进行写入。我想也许有些编码器参数没有设置正确,但是这个MSDN页面表明PNG编码器没有参数。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms533846(v=vs.85).aspx

所以,嗯,我想我的问题是“帮助!” : - )

更具体地说,是否有人知道任何MSDN原生函数是否会让我生成具有我可以定义的味觉和至少一种透明颜色的8位PNG?一个简单的解决方案会很棒,但是我对CImage感到很生气,因为我愿意放弃它并尝试别的东西。

或者,是否有人知道是否有可用于修复损坏的背景颜色的命令行实用程序?

谢谢!

0 个答案:

没有答案