【问题标题】:How to create PictureBoxes with shapes based on a Picture如何根据图片创建具有形状的图片框
【发布时间】:2014-12-17 16:37:16
【问题描述】:

问题: 我有白色背景上的物体图片。 我需要确实具有这些对象的确切形状的 PictureBox,但我不知道这些对象的先验外观。

【问题讨论】:

    标签: c# winforms picturebox shape


    【解决方案1】:

    我对此的解决方案是一个新课程:

    class ShapedPictureBox : PictureBox
    {
        public ShapedPictureBox()
        {
    
        }
    
        public Color transparentColor = Color.White;
    
        public void updateShape()
        {
        if(this.Image = null) return;
        Bitmap bitmap = new Bitmap(this.Image);
        System.Drawing.Drawing2D.GraphicsPath graphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
        for(int x = 0; x < this.Image.Width; x++)
            for(int y = 0; y < this.Image.Height; y++)
                if(transparentColor != bitmap.GetPixel(x, y))
                    graphicsPath.AddRectangle(new Rectangle(new Point(x, y), new Size(1, 1)));
        this.Region = new Region(graphicsPath);
        }
    }
    

    每当您使对象无效时,都会重新创建形状。我知道这个解决方案根本无效,但这是我发现的唯一一个..我希望它可以帮助某人..

    如果您有更好/更有效的想法,请告诉我。

    【讨论】:

    • 只需使用 bitmap.MakeTransparent(Color.White);
    • 最起码要改进的是不要在每次 Invalidate 时触发区域创建!无效不受您控制;只要系统认为有必要,它就会发生,例如在从最小化或越过屏幕边界恢复表单之后。而是将它放在一个函数中,您可以在更改图像时调用它或让 LoadCompleted 触发它! - 您是否尝试过我向您展示的帖子中的解决方案?
    • 为图像的每个像素调用GetPixel(),每次您将其无效作为解决方案都是荒谬的! 1x1 矩形使情况变得更糟。
    • @γηράσκωδ'αείπολλάδιδασκόμε 好吧,看到在另一种情况下你说这是不可能的,并且看到我不必经常调整形状,我认为这是一个可以接受的“解决方案”效率极低..
    • ...你说这是不可能的我没这么说。我说很难有一个透明背景图片框。然后您编辑了您的问题并删除了透明度部分(白色背景)。完全不同!
    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2018-08-25
    • 2022-01-14
    相关资源
    最近更新 更多