zoukankan      html  css  js  c++  java
  • 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会被重新计算。

  • 相关阅读:
    JavaScript的object和Array引用类型
    JavaScript中JSON的序列化与解析
    JavaScript获取url后面的参数
    JavaScript事件处理程序
    JavaScript手机端页面滑动到底部加载信息(移动端ajax分页)
    666
    jquery的键盘事件
    如何判断是不是微信登录浏览器
    写的挺好 placeholder 的模拟用法
    下雪了还是下冰雹了
  • 原文地址:https://www.cnblogs.com/junchu25/p/2633465.html
Copyright © 2011-2022 走看看