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; } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|