0

我有一些代码可以从侧面扫描声纳数据生成假彩色合成图像,我想将这些图像作为叠加层加载到 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 字节设置为全零、255s 和斜坡,认为它可能被解释为 Alpha 值,但这没有效果。

我还尝试逐步完成 CImage::Save() 的实现,我确定它使用 Gdiplus::Bitmap::Save() 来使用“内置 PNG 编码器”进行写入。我想也许有些编码器参数设置不正确,但是这个 MSDN 页面表明 PNG 编码器的参数为零。

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

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

更具体地说,有谁知道是否有任何 MSDN 本机功能可以让我生成 8 位 PNG,其口味我可以定义,并且至少有一种透明颜色?一个简单的修复会很棒,但我已经对 CImage 感到厌烦了,因为我愿意放弃它并尝试其他方法。

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

谢谢!

4

0 回答 0