InkCanvas加载/保存操作

lex*_*eme 3 c# wpf file bitmap inkcanvas

我之前从未使用过InkCanvas控件.我需要的是加载一个文件InkCanvas,绘制一些涂鸦并得到结果图像.我想用获得的图像做一些额外的操作.

至于储蓄

如我错了请纠正我.我找到了一个链接:http://www.centrolutions.com/Blog/post/2008/12/09/Convert-WPF-InkCanvas-to-Bitmap.aspx 根据帖子将加载图片考虑除了用户涂鸦.或者它只将涂鸦转换为位图?

至于装货

如何使用OpenFileDialog加载图像?我不想使用ISF.

谢谢!

key*_*rdP 5

保存:

如果您希望能够在保存后操纵笔划,则需要保存笔划.您可以使用StrokeCollection.Save方法执行此操作.

var fs = new FileStream(inkFileName, FileMode.Create);
inkCanvas1.Strokes.Save(fs);
Run Code Online (Sandbox Code Playgroud)

然后,您可以再次加载它并使各个笔划可访问.但是,一旦将其渲染出来(例如渲染到位图),那么渲染文件只能作为位图而不是单独的笔划加载.(当然,您可以同时执行这两个操作并将笔划另存为单独的文件).要保存为位图,您可以使用发布到的链接中的代码.

载入中

将位图加载到Image控件很简单,因为OpenFileDialog它将返回图像路径.

if (myOpenFileDialog.ShowDialog() == DialogResult.OK)
{
    myImageControl.Source = new BitmapImage(new Uri(myOpenFileDialog.FileName, UriKind.Absolute));
}
Run Code Online (Sandbox Code Playgroud)

这将加载图像并将其显示在表单上的图像控件中.

编辑:我认为你不能直接将位图加载到InkCanvas.但是,您可以加载笔划.

要再次加载笔划,可以使用StrokeCollection(Stream)

var fs = new FileStream(inkFileName,
                FileMode.Open, FileAccess.Read);
StrokeCollection strokes = new StrokeCollection(fs);
inkCanvas1.Strokes = strokes;
Run Code Online (Sandbox Code Playgroud)

有关更多功能,您可以阅读此CodeProject文章.

  • 如果你想分析像素,那么`InkCanvas`不是用来做这件事的最佳控件.在InkCanvas中创建图像后,可以保存位图(来自您给出的链接)并将字节数组转换为"Bitmap"控件.(http://msdn.microsoft.com/en-us/library/dwdz9wf7.aspx)要转换:http://social.msdn.microsoft.com/forums/en-US/winforms/thread/e57f7731-c703- 4c17-b1a2-32b155f9b745 /然后您可以使用Bitmap.GetPixel方法获取像素,或者,如果您需要效率,请使用此方法:http://www.bobpowell.net/lockingbits.htm (2认同)