透明度问题C#

时间:2013-06-24 21:19:58

标签: c# image visual-studio image-processing transparency

我正在使用VS 2008中的表单应用程序,并在重叠两个图像时遇到困难。这些图像是透明的,因此它们应该能够混合在一起,但结果如下所示: enter image description here

我看过这个帖子的类似帖子,但似乎无法弄清楚为什么这两个图片无法融合在一起。以下是我如何处理它的代码:

            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

2 个答案:

答案 0 :(得分:2)

您的问题在于overImage.Parent属性。 PictureBox支持对其父级的透明度。但是overImage的父级是形式,而不是backImage。因此,您将表单视为背景,而不是图像。请注意如何使用表单的BackgroundImage属性而不是backImage来解决问题。

这是因为PictureBox不是ContainerControl。因此,当您在表单上删除overImage时,它只是看起来就像它是backImage的子控件一样。事实并非如此,设计师将其作为父母的形式。您可以从位置属性和视图+(其他Windows)+文档大纲窗口中进行分析。该窗口非常清楚地显示了父子关系。请注意如何尝试拖动overImage使其成为backImage的子项也不起作用。

可以将Parent属性更改为backImage,您必须执行in code

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

答案 1 :(得分:0)

我认为你的问题来自于Bitmap图像不支持透明度这一事实。

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