Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们能够设置面板背景图像的不透明度吗?_C#_.net_Winforms - Fatal编程技术网

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

C# 我们能够设置面板背景图像的不透明度吗?,c#,.net,winforms,C#,.net,Winforms,正如你所知道的,这在WPF中是可能的。但我有一个Windows窗体中的项目,但我不想费力地将项目移动到WPF中。那么,在Windows窗体中是否可能?(与另一个问题不同,我不要求面板的透明度。我问的是“如果我想使用背景图像,我可以将其设置为半透明吗”)不透明度只能在顶级窗口上工作。不能在面板上使用不透明度 如果你只想要一张不透明的图片,我想你可以自己画,就像下面的例子图像是的一个实例 编辑: 文章可能会给你更多提示。你需要尝试两件事:将背景色设置为透明,并将图像转换为不透明度 发件人: 然后,面

正如你所知道的,这在WPF中是可能的。但我有一个Windows窗体中的项目,但我不想费力地将项目移动到WPF中。那么,在Windows窗体中是否可能?(与另一个问题不同,我不要求面板的透明度。我问的是“如果我想使用背景图像,我可以将其设置为半透明吗”)

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

如果你只想要一张不透明的图片,我想你可以自己画,就像下面的例子<代码>图像是的一个实例

编辑:
文章可能会给你更多提示。

你需要尝试两件事:将背景色设置为透明,并将图像转换为不透明度

发件人:

然后,面板属性将如下所示:

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

不,不,我知道怎么做。我在问“我是否使用背景图像”。请不要混淆。winforms并不真正支持透明性。如果你想坚持使用winforms,就不要尝试做那些花哨的UI东西,只做那些常规的、丑陋的、无聊的、战舰灰色的东西。否则,使用WPF,您将能够创建一个更丰富的UI。我搬到那里去了。但是这个应用程序非常大。再次在WPF中创建它将是一件非常困难的事情。将“向后”移动到winforms是前所未闻的,它的图形框架在comparison@Zgrknr您还可以使用
ElementHost
方法,将应用程序的一部分以渐进的方式移动到WPF,而不是完全返工,或者,如果你有几个
表单
s,你可以一个接一个地将它们重做到WPF
窗口
s,这就是我正在做的。但为了实现3D效果,我使用了Photoshop中设计的图片。当然,如果我找不到解决方案,我会在面板上画图。仍然投票支持它,因为它很有创意。谢谢。这也是我想到的第一件事
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);