InkCanvas 控件获取签名式的墨迹

 

IT我问网http://www.itiask.com/Answer1/Topic/227.aspx

 

效果图

最后得到的结果

 

步聚:

1  先得到InkCanvas中墨迹Strokes的Bounds,返回一个Rect

2  用步骤1中得到的rect设置InkCanvas的Clip属性

3  用RenderTargetBitmap为设置后的InkCanvas来个快照

 

代码:

     private void GetResultImage()

{

Rect rect = region.Strokes.GetBounds();

    Rect r = new Rect() { X = rect.X-5, Y = rect.Y-5, Width = rect.Width + 10, Height = rect.Height + 10 };
            RectangleGeometry rg = new RectangleGeometry() { Rect = r };
            region.Clip = rg;  //关键
            UpdateLayout();  //这一步很重要
          //  region.InvalidateVisual();
       RenderTargetBitmap aaa=     CopyUIElementToClipboard(region , r );

 

          SaveFileDialog dlg = new SaveFileDialog();
            dlg.Filter = //"Ink Serialized Format (*.isf)|*.isf|" +
                         "Bitmap files (*.bmp)|*.bmp";
            if ((bool)dlg.ShowDialog(this))
            {
                FileStream file = new FileStream(dlg.FileName,
                                                FileMode.Create, FileAccess.Write);

                BmpBitmapEncoder encoder = new BmpBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(aaa));
                encoder.Save(file);
                file.Close();

                region.Clip = null;
            }

}

 

  public RenderTargetBitmap CopyUIElementToClipboard(FrameworkElement ui, Rect rect)
        {

            double width = rect.Width;
            double height = rect.Height;
            RenderTargetBitmap bmp = new RenderTargetBitmap((int)width,
                (int)height , 96, 96, PixelFormats.Default  );
            DrawingVisual dv = new DrawingVisual();
            using (DrawingContext dc = dv.RenderOpen())
            {
                VisualBrush vb = new VisualBrush(ui);
                dc.DrawRectangle(vb , null, new Rect(new Point(), new Size(width, height)));

            }
            bmp.Render(dv);
            Clipboard.SetImage(bmp);  //剪切板

            return bmp;
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值