2013-06-24 132 views
0

我正在处理VS 2008中的表单应用程序,并且在重叠两个图像时卡住了。这些图像是透明的,所以他们应该能够融合在一起,但结果是下面显示: enter image description here透明度问题C#

我已经看到了类似的帖子这一个,但似乎无法找出为什么这两个图像不能融合在一起。下面是我如何去了解它的代码:

  InitializeComponent(); 
     this.Width = 700; 
     this.Height = 768; 

     Bitmap BackgroundImg = new Bitmap(@"C:\Users\Classic.bmp"); 
     Bitmap img = new Bitmap(@"C:\Users\Lime.bmp"); 
     backImage.Image = BackgroundImg; 
     backImage.Width = 700; 
     backImage.Height = 768; 
     backImage.Location = new Point(0, 0); 
     overImage.Image = img; 
     overImage.Width = img.Width; 
     overImage.Height = img.Height; 
     overImage.Parent = backImage; 
     //overImage.BackColor = Color.Transparent; 
     overImage.Location = new Point(200, 200); 

backImage和overImage是pictureBoxes

+0

也许这篇文章会有帮助:http://www.codeproject.com/Tips/201129/Change-Opacity-of-Image-in-C – Csharp

+0

检查了这一点:http://devblog.antongochev.net/ 2008/07/30/create-custom-ui-appearance-for-winforms-layered-form-part-5/ –

回答

0

我认为你的问题来自于一个事实,即位图图像不支持透明度。

与.PNG(例如)尝试,并使用在下面的链接中描述的方法SetColorKey:http://msdn.microsoft.com/en-us/library/e7755txx.aspx

+0

他们是.bmp文件,但压缩PNG文件 – haysam

+0

扩展名.bmp ** – haysam

+0

好啊,你可以尝试把它们恢复为“普通”.png文件?我不确定它为什么成为.bmp文件。此外,链接中描述的SetColorKey方法可以帮助您,但您必须使用Image类,而不是Bitmap类。 编辑:显然这种方法也适用于bmp的。我只能假设那里,因为我可以在他们展示的例子中看到它。 –

2

你的问题是与overImage.Parent属性。 PictureBox支持对其父项的透明度。但overImage的父代是表格,而不是backImage。所以你将形式看作是背景,而不是图像。注意如何使用表单的BackgroundImage属性而不是backImage修复问题。

发生这种情况是因为PictureBox不是ContainerControl。所以当你把图片放在图片上时,它只是看起来就像它是一个backImage的子控件。事实并非如此,设计师将这一形式作为父母。您可以从Location属性和View +(其他窗口)+文档大纲窗口中看到。这个窗口非常清楚地显示了亲子关系。请注意,如何拖动overImage以使其成为backImage的子项也不起作用。

将Parent属性更改为backImage是可能的,您必须这样做in code

另一个简单的解决方法是不使用PictureBox控件,而只是使用e.Graphics.DrawImage()在窗体的Paint事件中绘制图像。简单的油漆层,否则WPF实现透明度的方式。需要两行代码,使您的UI更快。