【问题标题】:Are we able to set opacity of the background image of a panel?我们可以设置面板背景图像的不透明度吗?
【发布时间】:2014-05-31 14:40:46
【问题描述】:

如您所知,这在 WPF 中是可能的。但是我在 Windows 窗体中有一个项目,但我不想努力将项目移动到 WPF 中。那么在 Windows 窗体中可能吗? (与另一个问题不同,我不问面板的透明度。我问的是“如果我会使用背景图片”,我可以让它半透明吗。)

【问题讨论】:

  • 没有没有。我知道该怎么做。我在问“如果我使用背景图片”。请不要混淆。
  • winforms 并不真正支持透明度。如果你想坚持使用 winforms,不要尝试做花哨的 UI 东西,只做常规的、丑陋的、无聊的、战舰灰色的东西。否则,使用 WPF,您将能够创建更丰富的 UI。
  • 我在 WPF 上已经有一段时间了。我搬到了那里。但是这个应用程序非常大。再次在 WPF 中创建它将是一个非常困难的工作。
  • 将“向后”移动到winforms是闻所未闻的,相比之下它的图形框架是过时的
  • @Zgrknr 您也可以使用ElementHost 方法,以渐进的方式将应用程序的一部分移动到WPF,而不是整个返工,或者如果您有多个Forms,您可以逐步将它们改写为 WPF Windows

标签: c# .net winforms


【解决方案1】:

您需要尝试两件事:将 BackColor 设置为透明并将图像转换为具有不透明度的图像。

来自Change Opacity of Image in C#

public Image SetImageOpacity(Image image, float opacity) {
  Bitmap bmp = new Bitmap(image.Width, image.Height);
  using (Graphics g = Graphics.FromImage(bmp)) {
    ColorMatrix matrix = new ColorMatrix();
    matrix.Matrix33 = opacity;
    ImageAttributes attributes = new ImageAttributes();
    attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default,
                                      ColorAdjustType.Bitmap);
    g.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height),
                       0, 0, image.Width, image.Height,
                       GraphicsUnit.Pixel, attributes);
  }
  return bmp;
}

那么您的面板属性将如下所示:

panel1.BackColor = Color.Transparent;
panel1.BackgroundImage = SetImageOpacity(backImage, 0.25F);

【讨论】:

    【解决方案2】:

    不透明度只能在顶级窗口上使用。您不能在面板上使用不透明度。

    如果您只想要一张不透明的图片,我认为您可以自己绘制它,如下例所示。 imageSystem.Drawing.Image 的一个实例。

    using (Graphics g = Graphics.FromImage(image))
    {
        Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width);
        g.DrawLine(pen, -1, -1, image.Width, image.Height);
        g.Save();
    }
    

    编辑: This 文章也许会给你任何进一步的提示。

    【讨论】:

    • 是的,我就是这么做的。但是为了提供 3D 效果,我使用的是在 Photoshop 中设计的图片。当然如果我找不到解决方案,我会借鉴Panel。仍然投票,因为它很有创意。谢谢。
    • 这也是我首先想到的。 ;)
    猜你喜欢
    • 2023-03-31
    • 2011-05-23
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多