【问题标题】:Delphi XE5 Firemonkey - How to make image background transparent runtime?Delphi XE5 Firemonkey - 如何使图像背景透明运行时?
【发布时间】:2014-03-31 11:19:34
【问题描述】:

我正在为 Firemonkey 重写我的一个旧游戏,最初是用 Delphi 2010 编写的。在那些日子里,使用 TImage.Transparent := true 使游戏的背景变得透明很容易,但在 Firemonkey 中我找不到这很容易。我了解到设计时允许您轻松设置透明颜色,然后对象背景就像您想要的一样透明,但是如何在运行时实现这一点?我正在创建许多动态的 TImage 对象,作为游戏中的一部分,显然需要它们具有透明的背景。任何人都可以在这里帮助我吗?提前致谢。

【问题讨论】:

    标签: image delphi runtime transparent firemonkey


    【解决方案1】:

    FireMonkey 图像使用每像素 32 位的模式,其中红色、绿色和蓝色各 8 位加上额外的 8 位用于透明度,也称为 Alpha 通道。如果 alpha 通道的值为 #FF 像素将是不透明的,#00 将是完全透明的,介于两者之间的值将相应地改变透明度。

    因此,可以使用 8 位十六进制数字设置 FireMonkey 中的颜色(实际上是 TAlphaColor),其中位映射到 #AARRGGBB,其中 AA 是透明度/Alpha 通道。

    因此,#FF00FF00 是不透明的绿色,#88FF0000 是半透明的红色。前两位数字为 #00 且完全透明的任何颜色值。

    FireMonkey 包含预定义的常量 claNull,用于完全透明的颜色。

    您还可以使用 TAlphaColorRec 记录通过其字段 A、R、G 和 B 访问 TAlphaColor 变量的各个颜色。例如

    红色 := TAlphaColorRec(MyColour).R;

    TAlphaColorRec(MyColour).A := #00;

    【讨论】:

    • 很好的答案,谢谢!非常感谢您花时间向我解释这一点。
    【解决方案2】:

    在加载bipmap图像(背景为白色的位图)之前,您可以更改Image的de背景颜色(简单颜色)并在MultiResBitmap编辑器中选择它:

    或者为图像添加真正的透明度并将其转换为 PNG。 如果您加载具有透明性的 PNG,编辑器会完美地对其进行充电。

    问候。

    【讨论】:

    • 将图像转换为 PNG,这让事情变得容易多了 :) 谢谢。
    【解决方案3】:

    我在这里给出一个代码答案Is there an FMX function to set a TImage's transparent color at runtime? 可能会解决这个问题。它是用 XE5 编写的 C++,但我想转换到 Delphi 应该相当简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多