【问题标题】:Is it possible to have two overlapping PictureBox controls with transparent images? [duplicate]是否可以有两个重叠的带有透明图像的 PictureBox 控件? [复制]
【发布时间】:2012-07-10 11:17:40
【问题描述】:

有两个重叠的PictureBox controls,我试图让图片框的透明区域让下面的控件(按 z 顺序)可见。

即使在trying what Microsoft suggests 之后,我也无法得到想要的结果。

这是我目前拥有的:

这就是我想要的:

所以我的问题是:

有什么方法可以通过两个相互重叠的PictureBox 控件(或其他方式)实现我想要的结果并让透明区域发光?

更新:

实际上我通过使用this answer 解决了这个问题“Transparent images with C# WinForms”。

【问题讨论】:

  • 图片的 ext 是什么?
  • @sikas 盾牌是一个带有 alpha 通道的 PNG 文件。为什么这很重要?
  • WinForms 默认不支持这个。你需要做一些非常有趣的绘图技巧才能让它工作。然而,WPF 可以顺利地做到这一点。
  • stackoverflow.com/questions/9387267/… 相同的方法只有在正确的背景下阴影才会看起来不错,因此正确的位置至关重要。

标签: c# .net winforms picturebox alpha-transparency


【解决方案1】:

试试这个

private void Form1_Load(object sender, EventArgs e)
{
  // Transparent background...  
  pictureBoxOverlay.BackColor = Color.Transparent;

  // Change parent for overlay PictureBox...
  pictureBoxOverlay.Parent    = pictureBoxMain;

 // Change overlay PictureBox position in new parent...
 // pictureBoxOverlay.Location  = new Point(0, 0);
}

结果

Link

【讨论】:

  • 谢谢,除非覆盖图片框被图片框剪裁,否则此方法有效。我只需要它们部分重叠。
【解决方案2】:

据我所知,控件的透明度取决于其父控件(如您提供的链接中所述),这意味着为了获得您想要的效果,您需要有一张图片盒子嵌套在另一个图片框中,鉴于图片框不是容器,这是不可能的。

但是,您可以为父图像使用自定义容器控件而不是图片框。 最基本的控件是面板。只需设置控件的背景图片,并将第二个图片框放入其中即可。

另一种解决方案是使用单个图片框并手动管理渲染。

这是迄今为止最好的解决方案,因为另一种方法的伪模拟透明度非常低效。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多