加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

InkCanvas 控件获取签名式的墨迹

发布时间:2020-12-16 22:37:37 所属栏目:大数据 来源:网络整理
导读:IT我问网 : http://www.itiask.com/Answer1/Topic/227.aspx 效果图 最后得到的结果 步聚: 1 先得到InkCanvas中墨迹Strokes的Bounds,返回一个Rect 2 用步骤1中得到的rect设置InkCanvas的Clip属性 3 用RenderTargetBitmap为设置后的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,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; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读