2014-05-22 34 views
0

我的主窗体上有几个TJvImage组件。一个在设计时从部分透明的PNG文件加载。另一个比第一个还小。它在运行时加载另一个部分透明的PNG文件。德尔福2007年 - 从PNG文件加载TJvImage失去透明度

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

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

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

真正的困境是,写一个最小的测试程序来试图证明问题不是显示的问题,但在应用程序本身的相同代码不起作用。

是否有任何可能影响行为的底层主窗体?

+1

我建议你找出问题所在。剥离失败的代码,直到它工作。看看dfm文件。为什么将Transparent设置为True?您的图片有一个Alpha通道。 –

+0

我从来没有想过你需要设置'透明'为FALSE才能获得透明度。现在我明白了! (帮助状态:“将透明设置为true以允许TImage对象后面的对象通过图像的背景显示。将Transparent设置为false以使图像的背景不透明”)。不幸的是,将Transparent设置为false并不能解决问题。我尝试创建一个项目并将违规表单的全部内容粘贴到项目中,并且图像显示正常。我有一些工作在我面前。 – rossmcm

回答

1

我不知道这是否与TJvImage相同,但是当您将TImage的透明属性设置为True时,它会导致TImage跳过使用TransparentColor渲染任何像素。 如果未设置透明色,则使用左下像素的颜色。 在这种模式下,TImage不会考虑alpha通道。 Infact透明度仅适用于将TBitmap类型的图像加载到TImage中时。

我觉得TJvImage可能以类似的方式工作。所以为了正确显示你的图像,你应该把Transparent属性设置为False。这可能会允许TJvImage通过使用编码到图片本身的Alpha透明度来渲染图片。