【问题标题】:Transparent PNG in PictureBoxPictureBox中的透明PNG
【发布时间】:2010-12-19 11:30:18
【问题描述】:

我正在尝试制作一个简单的应用程序,通过将模板拖到图片上,可以将图像与透明 PNG 模板进行比较。为此,我需要一种方法来创建一个包含 PNG 图像并且在 png 是透明的地方是透明的 PictureBox。 一切正常,但透明度部分:当我将 PNG 图像加载到 PictureBox(背景颜色设置为透明)时,它显示包含面板的背景颜色,而不是它悬停的图像。

我搜索但只找到了一种使 PictureBox 完全透明的方法。

【问题讨论】:

    标签: c# transparency picturebox


    【解决方案1】:

    很难制作一个部分透明的控件。

    您应该做的是处理较低的PictureBoxPaint 事件(不需要透明的事件),并使用e.Graphics.DrawImage(image, x, y) 绘制覆盖图像。这将正确地绘制透明和半透明的图像。

    编辑:针对您的评论,在MouseMove 事件中调用Invalidate 方法没有任何问题。但是,您会注意到一些闪烁。为了解决闪烁,做一个继承PictureBox的控件,并在构造函数中调用SetStyle(ControlStyles.DoubleBuffered, true)

    【讨论】:

    • 问题是拖拽 - 如果我需要在鼠标的每个像素移动上重新绘制图像,这不会是性能灾难吗?
    • 为了解决闪烁,在大多数情况下,我发现Update();做得更好。
    • @lucifer:调用Update()不会减少闪烁。
    【解决方案2】:

    如果您将pictureBoxOnTop 添加到要悬停的pictureBoxToBeHovered 的控件列表中,这将正常工作。

            pictureBoxToBeHovered.Controls.Add(pictureBoxOnTop);
            pictureBoxOnTop.BackColor = Color.Transparent;
            pictureBoxOnTop .Location = new Point(0,0) ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2023-04-08
      • 2020-04-13
      相关资源
      最近更新 更多