Silverlight裁剪元素图片

WriteableBitmap可以对元素产生贴图,而这个元素并不需要被实际添加到呈现元素中。Canvas的特点是在给定的宽度、高度显示元素,如果元素超出给定的viewport就不可见。对于一个元素来说裁剪左上部分的图片可以通过Canvas的SetLeft和SetTop函数或者对元素进行移动的变换(TranslateTransform)。而右下角的部分可以通过显示设置Canvas的宽度、高度来定义。比如你可以编写这么一个扩展函数来将元素裁剪到一个Canvas:

 1 /// <summary>
 2 /// 剪辑为画布
 3 /// </summary>
 4 /// <param name=”element”>元素</param>
 5 /// <param name=”rect”>矩形</param>
 6 /// <returns>画布</returns>
 7 public static Canvas CropeedToCanvas(this FrameworkElement element, Rect rect)
 8 {
 9   // 平移变换
10   TranslateTransform transform = new TranslateTransform();
11 
12   transform.X = -rect.X;
13   transform.Y = -rect.Y;
14 
15   Image image = new Image();
16 
17   image.Stretch = Stretch.None;
18   image.RenderTransform = transform;
19   image.Source = new WriteableBitmap(element, null);
20 
21   Canvas canvas = new Canvas();
22 
23   canvas.Width = rect.Width;
24   canvas.Height = rect.Height;
25 
26   canvas.Children.Add(image);
27 
28   return canvas;
29 }

虽然Canvas内部只有一个元素,不要使用容纳单个元素的ContentControl来实现这个效果。比如Border,因为Border在指定Child的时候不会立刻计算出本身的ActualWidth和ActualHeight,而Canvas在调用Children属性的Add函数后,它的ActualWidth和ActualHeight会被重新计算。

原文地址:https://www.cnblogs.com/junchu25/p/2633465.html