我们能够设置面板背景图像的不透明度吗?

时间:2014-04-16 15:50:08

标签: c# .net winforms

如你所知,它可以在WPF中使用。但我有一个Windows窗体项目,但我不想努力将项目转移到WPF。在Windows Forms中可以吗? (与另一个问题中的问题不同,我不会问小组的透明度。我要求"如果我要使用背景图像",我可以将其设置为半透明。)

2 个答案:

答案 0 :(得分:4)

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

来自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);

答案 1 :(得分:1)

不透明度只适用于顶级窗口。您无法在Panel上使用不透明度。

如果您只想要一张不透明的图片,我想您可以自己绘制,如下例所示。 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文章可能会给你任何进一步的提示。