在 Matlab 中读取 "simple" 透明 PNG

Read "simple" transparent PNG in Matlab

我正在尝试使用 PNG 图像作为工具栏图标。我目前正在使用 imread 阅读它们并设置相应的 CData 值。

现在我有一些透明的图像。没有 alpha 通道(我找到了一些解决方案的线程),但我得到了某种 "Simple Transparency"。 imfread 函数 returns "simple" 用于 Transparency 字段,值向量介于 0 和 1 之间用于 SimpleTransparencyData 字段。

我在 Matlab 帮助和互联网上都找不到关于这种透明度类型的任何信息。所以我想知道是否可以直接在工具栏中显示透明图像,或者如果不能,如何将透明值与工具栏的背景颜色合成。

我对我可能想到的唯一解决方案进行了快速测试,它似乎确实有效:

我忘了说,我为此使用了带索引的 PNG 文件。但这种透明度似乎暗示了这一事实。

索引颜色的顺序是(部分)透明颜色在 table 的开头。 SimpleTransparencyData 现在指定每个索引颜色的透明度。不透明的颜色被排除在外,因为颜色比透明度值多。

有了这些附加信息,就可以轻松地将单一背景颜色与图像合成。

总之,您将 CData 值设置为 NaN 以表示透明度。

请参阅我在 undocumentedmatlab.com 上写的 article,其中描述了如何为 uicontrol 执行此操作。

对于工具栏图标,您可以用相同的方式修改 CData 属性 - 主要区别在于您不需要修改背景颜色 属性。