【问题标题】:Transparency Issue C#透明度问题 C#
【发布时间】:2013-06-21 12:58:55
【问题描述】:

我正在开发 VS 2008 中的表单应用程序,但在重叠两个图像时卡住了。这些图像是透明的,因此它们应该能够混合在一起,但结果如下所示:

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

            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 是图片框

【问题讨论】:

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


【解决方案1】:

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

这是因为 PictureBox 不是 ContainerControl。因此,当您将 overImage 放在表单上时,它只是 看起来 像 backImage 的子控件。不是,设计师将表单设为父级。您可以从 Location 属性和 View + (Other Windows) + Document Outline 窗口中看出。该窗口非常清楚地显示了父子关系。请注意如何尝试拖动 overImage 使其成为 backImage 的子级也不起作用。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 它们是 .bmp 文件但压缩的 png 文件
    • 啊,很好,你能试着把它们作为“正常”的 .png 文件放回去吗?我不确定为什么它也变成了 .bmp 文件。链接中描述的 SetColorKey 方法也可以帮助您,但您必须使用 Image 类,而不是 Bitmap 类。编辑:显然这种方法也适用于 bmp。我只能假设在那里,正如我在他们展示的示例中看到的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2013-01-24
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多