我正在尝试制作一个简单的应用程序,通过将模板拖到图片上,可以将图像与透明的 PNG 模板进行比较。为此,我需要一种方法来创建一个包含 PNG 图像并且在 png 是透明的地方是透明的 PictureBox。一切正常,但透明度部分:当我将 PNG 图像加载到 PictureBox(背景颜色设置为透明)时,它显示包含面板的背景颜色,而不是它悬停的图像。
我搜索但只找到了一种使 PictureBox 完全透明的方法。
我正在尝试制作一个简单的应用程序,通过将模板拖到图片上,可以将图像与透明的 PNG 模板进行比较。为此,我需要一种方法来创建一个包含 PNG 图像并且在 png 是透明的地方是透明的 PictureBox。一切正常,但透明度部分:当我将 PNG 图像加载到 PictureBox(背景颜色设置为透明)时,它显示包含面板的背景颜色,而不是它悬停的图像。
我搜索但只找到了一种使 PictureBox 完全透明的方法。
很难制作部分透明的控件。
您应该做的是处理 lowerPictureBox
的Paint
事件(不需要透明的事件),并使用e.Graphics.DrawImage(image, x, y)
. 这将正确绘制透明和半透明图像。
编辑:针对您的评论,在事件中调用该Invalidate
方法没有任何问题。MouseMove
但是,您会注意到一些闪烁。为了解决闪烁,制作一个继承的控件,并在构造函数中PictureBox
调用。SetStyle(ControlStyles.DoubleBuffered, true)
如果您将pictureBoxOnTop 添加到要悬停的pictureBoxToBeHovered 的控件列表中,这可以正常工作。
pictureBoxToBeHovered.Controls.Add(pictureBoxOnTop);
pictureBoxOnTop.BackColor = Color.Transparent;
pictureBoxOnTop .Location = new Point(0,0) ;