【问题标题】:Delphi 2007 - Loading TJvImage from a PNG file loses transparencyDelphi 2007 - 从 PNG 文件加载 TJvImage 会丢失透明度
【发布时间】:2014-05-22 03:29:10
【问题描述】:

我的主窗体上有几个 TJvImage 组件。一个是在设计时从部分透明的 PNG 文件加载的。另一个比第一个小,在它前面。它在运行时与另一个部分透明的 PNG 文件一起加载。

JvImage1.Picture.LoadFromFile ('Logo.png') ;  

JvImage1.Transparent 设置为 TRUE。问题很简单:忽略 alpha 通道渲染较小的图像 - 即,它冲出背景图像。

当我在设计时加载两个图像时,不会发生这种情况。它们在表单上都显示为部分透明,并在我运行程序时正确显示。

真正的困境是,为尝试演示问题而编写的最小测试程序确实没有显示问题,但应用程序中的相同代码本身却没有运行。

底层的主要形式有什么会影响行为的吗?

【问题讨论】:

  • 我建议您隔离问题。删除失败的代码,直到它工作。查看 dfm 文件。为什么将透明设置为真?您的图像具有 Alpha 通道。
  • 我从未想过您需要将 Transparent 设置为 FALSE 才能使透明度发挥作用。现在我知道了! (帮助声明:“将透明设置为 true 以允许 TImage 对象后面的对象通过图像的背景显示。将透明设置为 false 以使图像的背景不透明”)。不幸的是,将透明设置为 false 并不能解决问题。我尝试创建一个项目并将违规表单的全部内容粘贴到其中,并且图像显示正常。我还有一些工作要做。

标签: delphi png delphi-2007 alpha-transparency jvcl


【解决方案1】:

我不知道这对于 TJvImage 是否相同,但是当您将 TImage 的透明属性设置为 True 时,它​​会导致 TImage 跳过使用透明颜色渲染任何像素。 如果没有设置透明色,则使用左下像素的颜色。 在这种模式下,TImage 不会进入 alpha 通道。 Infact Transparency 仅在您将 TBitmap 类型的图像加载到 TImage 时才有效。

我猜 TJvImage 可能以类似的方式工作。因此,为了正确显示您的图像,您应该将透明属性设置为 False。这可能会允许 TJvImage 使用编码到图片本身的 Alpha 透明度来渲染您的图片。

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2013-09-13
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多