【问题标题】:How to setup a TIcon instance to support alpha channel icons (SupportsPartialTransparency)如何设置 TIcon 实例以支持 Alpha 通道图标 (SupportsPartialTransparency)
【发布时间】: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-&gt;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:如果您阅读TImageList documentation,您会看到您正在调用受TImageList.DrawingStyle 属性约束的GetIcon() 版本,您说它仍然是默认值,默认为dsNormal。请尝试将其设置为 dsTransparent,或调用具有 ADrawingStyle 参数的 GetIcon() 版本。是的,将ColorDepth 设置为cd32Bit 以处理带有Alpha 通道的图像。

标签: c++builder delphi-2009 vcl


【解决方案1】:

我只是使用 TPngImageList,它与 TImageList 兼容。此外,设计时编辑器更加灵活:您需要将 .ico 转换为 .png。 .

它是免费且广泛可用的,例如:https://github.com/TurboPack。透明度没有问题,因为 :) 顺便说一句,将图标保留为 PNG 更合适,您可以在其他开发工具和平台上使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2022-11-07
    • 2019-01-13
    • 2012-10-07
    • 2023-03-16
    • 2012-04-18
    • 2011-07-14
    相关资源
    最近更新 更多