【发布时间】:2016-05-10 17:48:15
【问题描述】:
使用 Borland C++ Builder 2009 我注意到在替换 TImagelist 中的图像时,alpha 通道数据会以某种方式损坏。
TIcon *Icon = new TIcon() ;
for (int x = 0 ; x < OS_Specific_count ; x++)
{
OS_xx_ImageList->GetIcon(x, Icon) ;
Use_ImageList->ReplaceIcon(x, Icon) ;
}
delete Icon ;
另一个 Q (TImageList - True color + alpha channel vs. 8-bit (256 colors)) 中也描述了这个问题(+screenhots),但我现在正试图通过更具体的问题来缩小范围。
在帮助文件中浏览 TIcon 时,我注意到一个只读属性:SupportsPartialTransparency。
就我而言,它似乎是false,我想知道这是否不是解决这个问题的关键? Icon->Transparent = true 没有将 SupportsPartialTransparency 设置为 true !
我想知道如何确保 TIcon 实例正确“获取”和“替换”Alpha 通道信息?
ImageList 是在设计时创建的,具有默认属性(未更改)并包含通过 IDE 导入的 16x16 图标。导入的图标包含 Alpha 通道信息。
【问题讨论】:
-
透明 部分透明,不超过美元 == 半美元。您一直在询问有关您的图像列表的问题,而不包括该图像列表的属性。
-
@KenWhite - 默认设置,16x16 图标
-
什么是颜色深度?你把它设置为cd32吗?您被要求在其他问题中提供完整的 MCVE,其中包括表单文件的内容。我看你还没有 - 请现在就这样做。如果您不打算提供详细信息,我们就不太可能为您提供帮助,并且在某些时候忽略更多信息的请求会开始惹恼人们。我可以绝对肯定地说 alpha 通道图像可以正常工作。我的应用程序中有很多工具栏,我为我的应用程序使用了多种尺寸的 alpha 通道图标。
-
很抱歉你惹恼了@KenWhite。另一个 Q 提到了它,但我也在这里添加了它。 ImageLists 包含它们的默认属性。将它们拖放到表单上时具有的属性。对于颜色深度,即: cdDeviceDependent 你是说我应该将它们设置为 cd32 以进行复制,如上面的代码示例所示以正常工作吗?我看不到图标实例的部分透明度将如何变化?或者当 ImageList '得到图标时它会改变吗? PS。 alpha 通道图标也适用于我!只是上面的代码示例摆脱了频道数据
-
@Peter:如果您阅读
TImageListdocumentation,您会看到您正在调用受TImageList.DrawingStyle属性约束的GetIcon()版本,您说它仍然是默认值,默认为dsNormal。请尝试将其设置为dsTransparent,或调用具有ADrawingStyle参数的GetIcon()版本。是的,将ColorDepth设置为cd32Bit以处理带有Alpha 通道的图像。
标签: c++builder delphi-2009 vcl