【发布时间】:2015-02-16 00:57:17
【问题描述】:
我想给一个图片框我所拥有的图像的形状。图像当然是矩形的,但是应该忽略背景颜色,这会导致所需的形式。因此,如果在白色背景上有一张香蕉的图片,我应该在最后有一个香蕉形状的图片框。这是需要的,这样我就可以在 AxWMPLib Mediaplayer 前面移动形状的图片框,而无需周围有矩形覆盖整个视频的香蕉。
我的方法是创建一个扩展 PictureBox 的新类,然后将区域设置为形状。问题是,我不知道如何获得形状。
class ShapedPBox : PictureBox
{
public ShapedPBox()
{
this.Paint += this.shapedPaint;
}
void shapedPaint(object sender, paintEventArgs e)
{
System.Drawing.Drawing2D.GraphicsPath gP = new System.Drawing.Drawing2D.GraphicsPath();
//do something to give gP.addPicture? perhaps something with transparency key?
this.Region = new Region(graphicsPath);
}
public Image image;
}
【问题讨论】:
-
这是您可以控制的图片还是您完全不知道图片的内容?
-
视情况而定。如果后面有其他控件或者您移动它,您就会遇到问题。但是,如果只有表格没有移动,则
BackColor = transparent并正常加载图像。您需要GraphicsPath进行命中测试。 -
1.我不知道这张图片.. 2. 是的,还有其他控件在它后面移动,它本身也会移动。这就是为什么 BackColor = Color.Transparent 不起作用..
-
一个简单的答案,你做不到。一个复杂的,你需要许多“黑客”,包括获取
dc's和自己绘制背景。 -
这显然是不是标记的副本。真正的问题是如何将图像中的形状提取到图形路径中。这太宽泛了,-)
标签: c# winforms transparency picturebox shape