【问题标题】:InkCanvas Load/Save operationsInkCanvas 加载/保存操作
【发布时间】:2011-09-08 21:57:34
【问题描述】:

我以前从未使用过InkCanvas 控件。我需要将一个文件加载到InkCanvas,画一些涂鸦并得到结果图像。我想对得到的图像进行一些额外的操作。

至于保存

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

至于加载

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

谢谢!

【问题讨论】:

    标签: c# wpf file bitmap inkcanvas


    【解决方案1】:

    保存:

    如果您希望在保存后能够操作笔画,那么您需要保存笔画。您可以使用StrokeCollection.Save 方法来做到这一点。

    var fs = new FileStream(inkFileName, FileMode.Create);
    inkCanvas1.Strokes.Save(fs);
    

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

    加载中

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

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

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

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

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

    var fs = new FileStream(inkFileName,
                    FileMode.Open, FileAccess.Read);
    StrokeCollection strokes = new StrokeCollection(fs);
    inkCanvas1.Strokes = strokes;
    

    更多功能可以看这篇CodeProject article

    【讨论】:

    • 1) 上述帖子中的代码是否会将用户的涂鸦和背景图像存储为一张图像?
    • 2) 你写MyImageControl是什么意思。我需要将图片上传到InkCanvas。我没有找到这样的属性?
    • 1) 不会。用户的涂鸦 (Strokes) 存储在单独的文件中。 2) 我不认为 InkCanvas 可以加载位图。相反,您可以使用 StrokeCollection(Stream) msdn.microsoft.com/en-us/library/ms522846.aspx 再次加载笔画(我已经更新了答案)
    • 但我读到它是相当过分的读/写笔画。我需要从结果图像中获取像素。这意味着我不需要单独的结果,而是组合(修改后的图像)。
    • 如果你想分析像素,那么InkCanvas 不是最好的控制。在 InkCanvas 中创建图像后,您可以保存位图(来自您提供的链接)并将字节数组转换为 Bitmap 控件。 (msdn.microsoft.com/en-us/library/dwdz9wf7.aspx) 转换:social.msdn.microsoft.com/forums/en-US/winforms/thread/… 然后您可以使用 Bitmap.GetPixel 方法获取像素,或者,如果您需要效率,请使用此方法:bobpowell.net/lockingbits.htm
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多