gpt4 book ai didi

delphi - 如何将带有 Alpha channel 的图像绘制到 TSpeedButton?

转载 作者:行者123 更新时间:2023-12-03 14:59:55 26 4
gpt4 key购买 nike

我有一个 TSpeedButton 和一个包含各种字形的 TImageList。其中一个具有 Alpha channel ,当绘制到 UI 的某些部分时,它看起来非常漂亮...但是当该字形绘制在 TSpeedButton 上时,它不会将 Alpha channel 带入效果。

查看TButtonGlyph.DrawButtonGlyph中的相关代码,它为Transparent参数传递了true,但是Transparent if FThemesEnabled 代码路径中根本不考虑 code>;它仅在 else 部分中被引用。由于该程序启用了主题,这是否意味着无法将 alpha 混合图像绘制到 TSpeedButton 上?

有什么办法可以解决这个问题吗?

编辑:仔细观察一下,它似乎考虑了透明度......有点。完全透明的像素根本不会被绘制,这是正确的行为。但边缘周围的抗锯齿(部分透明)被绘制为完全不透明。

最佳答案

据我所知,TSpeedButton 会获取您的位图并将其添加到图像列表中。这是TButtonGlyph 私有(private)部分中的FGlyphList。该图像列表的 ColorDepthcdDeviceDependent。如果您希望考虑 Alpha 透明度,则需要该图像列表的 ColorDepthcd32Bit。这就是对文物的解释。

我不确定您如何解决这个问题。我认为我个人会继承 TButtonGlyph 并将其直接连接到您选择的图像列表。然后将 TButtonGlyph.DrawButtonGlyph 替换为从图像列表中绘制的代码。我确信您能够编写代码。

但是没有简单的解决方法。如果不对 VCL 进行重大修改,该图像列表将使用 cdDeviceDependent,并且没有简单的方法可以更改它。我认为没有明显的快速解决办法。

实际上,我会使用TButton,但这只是我的想法。

<小时/>

关于速度按钮的Transparent属性documentation说:

Specifies whether the background of the button is transparent.

Use Transparent to specify whether the background of the button is transparent.

This property works only if the Flat property of the TSpeedButton is set to True.

When Windows themes are enabled, the Transparent property cannot make the button background transparent.

也就是说,对于平面按钮,当无主题时,该属性会影响按钮背景,并且与字形绘制无关。

关于delphi - 如何将带有 Alpha channel 的图像绘制到 TSpeedButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com