【问题标题】:WPF: How to crop/clip a Drawing or a DrawingImage?WPF:如何裁剪/剪辑绘图或绘图图像?
【发布时间】:2013-12-27 02:00:02
【问题描述】:

我有一个函数接收我需要部分公开为 DrawingImage 的绘图(即:它的位置和大小将减小/更改以适合目标区域)。

如何裁剪/剪辑原始绘图的区域? 或者在转换为 DrawingImage 之后更容易做到这一点(如何剪辑该 DrawingImage)?

【问题讨论】:

    标签: wpf image drawing


    【解决方案1】:

    解决方案是将原始绘图封装在一个绘图组中,然后应用剪切几何图形...

    public DrawingGroup MyClippingFunc(Drawing OriginalDrawing, Rect ClippingArea)
    {
        var Group = new DrawingGroup();
        Group.Children.Add(OriginalDrawing);
        Group.ClipGeometry = new RectangleGeometry(ClippingArea);
    
        return Group;
     }
    

    【讨论】:

      【解决方案2】:

      这是另一种方法,以 InkCanvas StrokeCollection 类为例。

      using (DrawingContext drawingContext = drawingGroup.Open())
                      {
                          drawingContext.PushClip(new RectangleGeometry(yourRectangleObject));
                          Strokes.Draw(drawingContext);
                          drawingContext.Pop();
                      }
      

      【讨论】:

        【解决方案3】:

        我对你的问题有点困惑,但也许我对这个类似问题的回答会有所帮助?

        How can I use a PathGeometry as a mask for a BitmapSource (or any image data)?

        【讨论】:

        • 对不起,我指的是 DrawingImage 而不是 Image。
        • 对,但我还是不明白你需要怎么使用它。可以将 DrawingImage 设置为 Image 控件的 Source。在这种情况下,我认为设置 image.clip 属性的链接解决方案会得到你想要的吗?
        • 我需要在库函数中执行此操作,但尚不清楚结果将在何处/如何使用(例如,您建议的图像控件)。