首页 新闻 赞助 找找看

WPF里使用DrawingGroup的DrawingContext绘图后,如何清除指定区域中的图形

0
悬赏园豆:20 [已解决问题] 解决于 2015-05-06 17:33

我使用DrawingGroup的DrawingContext绘图后,包括直线,几何图形,图片,比如这个容器有1000*1000像素,我现在要清除指定区域中的图形,这个区域比如说有起点为(100,100)大小为100*100的区域,里面可能有各种已经画好的几何图形(直线,图片)的一部分,改怎么清除啊?

varCurrentDrawingGroup=newDrawingGroup();
using(DrawingContext dc =CurrentDrawingGroup.Open())
{ dc.DrawLine(CurrentPen,newPoint(
10,110),newPoint(530,112)); dc.DrawLine(CurrentPen,newPoint(10,120),newPoint(530,132)); dc.DrawLine(CurrentPen,newPoint(10,130),newPoint(530,122));
}

 类似于 

上面画完了,都会经过要清除的区域,改怎么实现?

问题补充:

修改了问题说明,补了个图,类似功能ios,andriod 都轻松实现,WPF中卡壳了!

Tobin的主页 Tobin | 初学一级 | 园豆:113
提问于:2013-09-05 15:35
< >
分享
最佳答案
0

下次Render的时候不要画要删掉的部分即可。

收获园豆:20
天方 | 大侠五级 |园豆:5407 | 2013-09-05 20:08

我没用uielement,直接在drawing group 上画的,这个该怎么解决?

Tobin | 园豆:113 (初学一级) | 2013-09-05 20:40

@ToBin: 

你这个都是算裁剪了, DrawingGroup 中有一个属性为ClipGeometry,它可以用来确定Drawing的显示边界,你这儿应该传入一个 “回” 字形的边界,外面的大口是整个Drawing的大小,里面的小口是要删除的区域。具体代码示例如下:

        Geometry getClipGeometry(Size clientSize)
        {
            var outer = new RectangleGeometry()
            {
                Rect = new Rect(0, 0, clientSize.Width, clientSize.Height),
            };

            var inner = new RectangleGeometry()
            {
                Rect = new Rect(100, 100, 100, 100),
            };

            var combinedGeometry = new CombinedGeometry()
            {
                Geometry1 = outer,
                Geometry2 = inner,
                GeometryCombineMode = GeometryCombineMode.Xor,
            };

            return combinedGeometry;
        }
    }


CurrentDrawingGroup.ClipGeometry = getClipGeometry(this.RenderSize);
天方 | 园豆:5407 (大侠五级) | 2015-05-08 00:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册