我使用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中卡壳了!
下次Render的时候不要画要删掉的部分即可。
我没用uielement,直接在drawing group 上画的,这个该怎么解决?
@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);