【问题标题】:Delphi PNGImage - Image transparency is not pureDelphi PNGImage - 图像透明度不纯
【发布时间】:2015-06-21 02:32:18
【问题描述】:

我在我的应用程序中使用 PNG 图像作为主要图像资源。由于我使用的是 Delphi 7,我下载了 PNGImage 库并将其包含在项目中。我像这样加载图像:

Form.image.Picture.LoadFromFile(PAnsiChar('\background.png'));

图像的边框上有透明和半透明像素。我遇到的问题是透明像素充满了我的桌面的随机缩放部分以及当前打开的窗口,而我希望看到实际位于表单下方的内容。

另外,表单具有以下属性:

BorderStyle: bsNone; TransparentColor: true; Visible: false;

这是当前状态(黑线上方)和所需状态的图片:

能否以某种方式解决这个问题,或者这就是 delphi 处理透明度的方式?

【问题讨论】:

  • 定义“固定”。换句话说,你想在你的形象下出现什么?你为什么要设置TransparentColorTransparentColorValue?而不是告诉我们你没有使用的 Delphi 版本,你能告诉我们你正在使用的 Delphi 版本吗?
  • 实际上您的表单设置为:“对于表单的每个黑色像素,显示底层桌面或窗口的像素。”您看到的结果似乎就是这样。有点不清楚您要达到的目标。
  • @Uwe Raabe 现在我明白我的描述有多么不清楚。是的,透明像素显示桌面,但我看到的是桌面的随机缩放部分,而不是实际放置在表单下方的部分
  • 您还没有尝试告诉我们您想要达到的目标。你问我们如何从 A 到 B,却没有告诉我们 B 是什么。
  • @David Heffernan 我想看看表单下面实际放置了什么

标签: image delphi transparency


【解决方案1】:

要让表单“遮蔽”其下方的内容,请使用表单AlphaBlendAlphaBlendValue 属性。 .png 图像不必部分(混合 alpha)透明,但可以。


如果您希望表单是半透明的,请使用 Alphablending,这是 Windows 的限制。另外你可以让某种颜色完全透明。在以下示例中,表单颜色为 clGray,除了将Transparent 属性设置为True 之外,它还定义为Transparent color 属性。对齐 alClient 的图像是 50% 透明的,放置在设置为透明的 TImage 上,但即便如此,它也不会显示为半透明,除非您启用了 AlphaBlending。同样,这是 Windows 的限制。您可以做的最好的事情是尝试为AlphaBlendingValue (240..250) 设置一个相当高的值和一个相当轻的图像以找到正确的折衷方案。

【讨论】:

  • 我对您插入的图像很好奇。所以你的框架有这个星星作为背景图像,对吧?那些留下来形成矩形的三角形似乎是透明的。它们是否显示了实际存在的内容,或者您​​有与我相同的错误?
  • 窗体是矩形的,ColorTransparentColor 属性都相同clGrayTransparent 属性是True。您可以从左右后面看到的 IDE 的垂直线获得有关表单边缘的提示。在表单上,​​我有一个TImage,我已将星形图像加载到其中。星形图像是一个矩形 .png,其中星形周围的像素是透明的。在设计时添加了按钮和轨迹栏(用于调整 Alphablend)。表单(或图像)没有来自后面代码的人工制品,它完全漂浮在后面的 IDE 之上。
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 2016-12-02
  • 2012-07-18
  • 2012-02-05
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多