【问题标题】:C# giving a PictureBox the shape of a Image [duplicate]C# 为 PictureBox 赋予图像的形状 [重复]
【发布时间】: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


【解决方案1】:

您可以将PictureBoxSizeMode 属性设置为StretchImage,这将删除默认背景颜色。当然,图像会根据图像和控件大小缩小或放大。

如果您无法调整图像大小并且您知道背景在哪里,则可以使用以下代码。它所做的只是从图像边缘获取颜色并将其设置为图片框的背景颜色。

Image image = Image.FromFile(@"c:\Image.png");
Bitmap bitmap = new Bitmap(image);
pictureBox1.BackColor = bitmap.GetPixel(0, 1);
pictureBox1.Image = image;

【讨论】:

  • 但是你在哪里/如何调整图片框的形状?
  • 我们没有。为什么需要改变形状?只需将背景颜色设置为与图像的背景颜色相同,它就会看起来好像无缝集成。如果您想更改图像的背景以匹配表单的背景,这将涉及大量的图像处理。
  • 我需要调整图片框的形状,因为我希望能够定位很多图片框和其他控件,这样它们就不会被“它们的矩形”相互覆盖..
  • 这只是锚定和对接的工作。看看这些属性和一个 TableLayoutControl。当涉及到复杂的布局时,这个控件非常棒。
  • 我几乎不怀疑这与提到的香蕉或类似的 AxWMPLib Mediaplayer 一起工作,是吗?
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多