将 InkCanvas 笔画转换为字节数组并再次转换回来

2023-12-13

我正在开发一个程序,它将 inkcanvas 笔划转换为字节数组进行加密,然后将其保存在 txt 文件中。本质上我需要将字节数组转换为 inkcanvas 笔划。我已经完成了代码的前半部分(它将 inkcanvas 笔划转换为字节数组):

    private byte[] InkCanvasToByte()
    {
        using (MemoryStream ms = new MemoryStream())
        {
            if(myInkCanvas.Strokes.Count > 0)
            {
                myInkCanvas.Strokes.Save(ms, true);
                byte[] unencryptedSignature = ms.ToArray();
                return unencryptedSignature;
            }
            else
            {
                return null;
            }
        }
    }

但我需要帮助编写一种方法来将字节数组转换为 inkcanvas 笔画,以便将 inkcanvas 笔画转换为 jpg。


到目前为止,我已经创建了一个打开字节数组文件并将其写入字节数组变量的方法:

    private void ReadByteArrayFromFile()
    {
        string Chosen_File = "";
        Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
        ofd.Filter = "All Files (*.*)|*.*";
        ofd.FilterIndex = 1;
        ofd.Multiselect = false;
        bool? userClickedOK = ofd.ShowDialog();
        if (userClickedOK == true)
        {
            Chosen_File = ofd.FileName;
        }
        byte[] bytesFromFile = File.ReadAllBytes(Chosen_File);

    }

现在我需要做的就是通过 inkcanvas 笔画将该字节数组转换回图像。如果我找到解决方案,我会用解决方案更新这篇文章!

EDIT:唔。我正在使用该链接中的代码,我得到:“输入流不是有效的二进制格式。起始内容(以字节为单位)是:00-FB-03-03-06-48-11-45-35 -46-35-11-00-00-80-3F-1F ...”

我正在使用的代码是:

    private void ReadByteArrayFromFile(string Chosen_File)
    {

        byte[] bytesFromFile = File.ReadAllBytes(Chosen_File);
        try
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(bytesFromFile);
            MyCustomStrokes customStrokes = bf.Deserialize(ms) as MyCustomStrokes;
            for(int i = 0; i < customStrokes.StrokeCollection.Length; i++)
            {
                if(customStrokes.StrokeCollection[i] != null)
                {
                    StylusPointCollection stylusCollection = new
                      StylusPointCollection(customStrokes.StrokeCollection[i]);
                    Stroke stroke = new Stroke(stylusCollection);
                    StrokeCollection strokes = new StrokeCollection();
                    strokes.Add(stroke);
                    this.MyInkPresenter.Strokes.Add(strokes);
                }
            }

        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message);
        }
    }

    private void DecryptByteArray(byte[] encryptedArray)
    {
    }


}
[Serializable]
public sealed class MyCustomStrokes
{
    public MyCustomStrokes() { }
    /// <SUMMARY>
    /// The first index is for the stroke no.
    /// The second index is for the keep the 2D point of the Stroke.
    /// </SUMMARY>
    public Point[][] StrokeCollection;
}

}


我的问题是我没有将输出序列化到保存的文件,因此当我加载该文件并反序列化它时会出错。这是正确的代码:

    private void SaveByteArrayToFile(byte[] byteArray)
    {
        var dialog = new System.Windows.Forms.FolderBrowserDialog();
        string filepath = "";
        if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            filepath += dialog.SelectedPath;
            System.Windows.MessageBox.Show(filepath);
        }
        filepath += "Signature.txt";
        MyCustomStrokes customStrokes = new MyCustomStrokes();
        customStrokes.StrokeCollection = new Point[myInkCanvas.Strokes.Count][];
        for (int i = 0; i < myInkCanvas.Strokes.Count; i++)
        {
            customStrokes.StrokeCollection[i] = 
            new Point[this.myInkCanvas.Strokes[i].StylusPoints.Count];
            for (int j = 0; j < myInkCanvas.Strokes[i].StylusPoints.Count; j++)
            {
                customStrokes.StrokeCollection[i][j] = new Point();
                customStrokes.StrokeCollection[i][j].X = 
                                  myInkCanvas.Strokes[i].StylusPoints[j].X;
                customStrokes.StrokeCollection[i][j].Y = 
                                  myInkCanvas.Strokes[i].StylusPoints[j].Y;
            }
        }
        MemoryStream ms = new MemoryStream();
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, customStrokes);
        File.WriteAllBytes(filepath, Encrypt(ms.GetBuffer()));
    }
   private void ReadByteArrayFromFile(string Chosen_File)
    {

        byte[] bytesFromFile = File.ReadAllBytes(Chosen_File);
        byte[] decryptedBytes = Decrypt(bytesFromFile);
        try
        {
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(decryptedBytes);
            MyCustomStrokes customStrokes = bf.Deserialize(ms) as MyCustomStrokes;
            for(int i = 0; i < customStrokes.StrokeCollection.Length; i++)
            {
                if(customStrokes.StrokeCollection[i] != null)
                {
                    StylusPointCollection stylusCollection = new
                      StylusPointCollection(customStrokes.StrokeCollection[i]);
                    Stroke stroke = new Stroke(stylusCollection);
                    StrokeCollection strokes = new StrokeCollection();
                    strokes.Add(stroke);
                    this.MyInkPresenter.Strokes.Add(strokes);
                }
            }

        }
        catch (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message);
        }
    }
[Serializable]
public sealed class MyCustomStrokes
{
    public MyCustomStrokes() { }
    /// <SUMMARY>
    /// The first index is for the stroke no.
    /// The second index is for the keep the 2D point of the Stroke.
    /// </SUMMARY>
    public Point[][] StrokeCollection;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 InkCanvas 笔画转换为字节数组并再次转换回来 的相关文章

  • 按范围迭代数组

    我有一个数组 1 2 3 4 5 6 100 我希望将此数组迭代 5 次 具体来说 取数组的前 5 个数字并获取平均值 继续处理接下来的 5 个数字并获取平均值 依此类推 我尝试过多种方法 例如Dequeue和 for 循环但未能获得所需的
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 在 angular2 中过滤数组

    我正在研究如何在 Angular2 中过滤数据数组 我研究过使用自定义管道 但我觉得这不是我想要的 因为它似乎更适合简单的表示转换 而不是过滤大量数据 数组排列如下 getLogs Array
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 如何将 WPF 大小转换为物理像素?

    将 WPF 与分辨率无关 宽度和高度转换为物理屏幕像素的最佳方法是什么 我正在 WinForms 表单中显示 WPF 内容 通过 ElementHost 并尝试制定一些大小调整逻辑 当操作系统以默认 96 dpi 运行时 我可以正常工作 但
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 双精度类型二维多维数组的 pinvoke 编组作为 c# 和 c++ 之间的输入和输出

    我有以下我正在尝试解决的双物质类型的 2d 多维数组的 c 和 c pinvoke 编组 我已经查看了以下热门内容以获得我目前拥有的内容使用双精度数组进行 P Invoke 在 C 和 C 之间编组数据 https stackoverflo
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder

随机推荐

  • Windows 窗体应用程序,带有窗体的自动缩放控件

    我是新手 设计一个可以调整大小的表单 并且我希望我的文本框 标签和按钮随表单调整大小 有人可以告诉我该怎么做吗 这取决于您需要的布局类型 您必须执行的 基本工具 具有以下属性 Anchor and Dock Anchor 使用 Anchor
  • 在运行时生成 HTML 文件并作为电子邮件附件发送

    我有一个项目要求 我们需要将 HTML 格式的日志表附加到发送给用户的电子邮件中 我不希望日志表成为正文的一部分 我不想使用 HTMLTextWriter 或 StringBuilder 因为日志表非常复杂 是否有另一种我没有提到的方法或可
  • PHP 从 XML 中检索数据

    我第一次尝试从地图应用程序的 XML 检索数据失败了 这是 XML Feed 的一部分
  • 使用productElements将元组转换为HList

    我正在使用 Shapeless 2 2 5 我尝试使用下面的代码将元组转换为 HList import shapeless import syntax std product 23 foo 2 0 true productElements
  • JavaScript、浏览器、窗口关闭 - 发送 AJAX 请求或在窗口关闭时运行脚本

    我试图找出用户何时离开指定页面 找出他何时使用页面内的链接导航离开是没有问题的 但我需要标记一些内容 例如他关闭窗口或键入另一个 URL 并按 Enter 键时 第二个不太重要 但第一个很重要 所以问题是 我怎样才能看到用户何时关闭我的页面
  • 如何以编程方式设置 iPhone 壁纸

    我正在开发一个应用程序 其中我必须将图像设置为iPhone壁纸 滑动解锁 屏幕上的背景图像 我们有这方面的 API 参考吗 请帮忙 提前致谢 帕尔梅斯瓦尔 目前 您唯一可以做的就是将图像保存到相机胶卷中 并为用户提供有关如何使用新图像更改壁
  • 在trigger_error之前的'@'(沉默运算符,at符号)的目的是什么?

    我在许多 Symfony 包 以及其他代码 中看到了这一行 trigger error The class is deprecated E USER DEPRECATED 根据文档 at 运算符用于消除错误 http php net man
  • 创建 atoi 函数

    我正在尝试创建自己的 atoi 函数 通过以下代码 我得到的返回值为 0 无论我更改函数中的数字变量 我都会得到返回值 关于修改代码有什么建议吗 my atoi function int atoi me char numstring int
  • HttpClient 中使用 wait 的异步调用永远不会返回

    我正在从基于 xaml 的内部拨打电话 C Win8 CP上的metro应用 此调用只需访问 Web 服务并返回 JSON 数据 HttpMessageHandler handler new HttpClientHandler HttpCl
  • 阻止直接 URL 访问图像文件?

    我想阻止人们通过在浏览器地址栏中输入 URL 来获取我网站的图像 同时允许他们在访问网页时查看图像 我尝试了以下 htaccess 代码 RewriteEngine on RewriteCond HTTP REFERER http www
  • JSF 2.0 简单登录页面

    我需要限制对应用程序的一部分的访问 为了访问该部分 用户需要登录 我的数据库中有一个名为 User 的表 其中包含用户名和散列密码以及由两个输入和一个提交组成的登录表单 但是 我不知道应该使用哪些类 数学来登录用户 我假设 jsf 中支持此
  • 保持mysql连接的正确方法[重复]

    这个问题在这里已经有答案了 我有一个 24 7 运行的应用程序 它使用 mysql 它的不同功能都使用mysql 实现它的一种方法是在应用程序中创建一个全局 mysql 实例 如下所示 self db MySQLdb connect hos
  • 导出 Room 数据库并附加到电子邮件 Android Kotlin

    我有以下代码用于导出房间数据库 然后将其附加到电子邮件中 目前 用户首先必须选择要保存数据的位置 然后才能附加数据 有没有一种方法可以做到这一点 而不必首先询问用户在哪里保存数据库 这是我的代码 fun exportDatabase val
  • 如何在 iis 服务器上启用 mod_rewrite

    我发现我的服务器上没有启用 mod rewrite 功能 SERVER SERVER SOFTWARE Microsoft IIS 7 0 架构 x86 我如何启用 mod rewrite 有人可以帮助我吗 对我有用的答案是安装微软 URL
  • 在 MKMapView 中设置当前位置图标下侧

    我想在地图下方显示我当前的位置 iOS 6 和 iOS 7 如下面的屏幕截图所示 用户可以看到进一步的视图 带有谷歌地图的谷歌默认应用程序 Right now the cursor that shows center in the view
  • 当服务器处于Unix套接字时如何连接到数据库?

    我与数据库 phpmyadmin 的连接有问题 这只是因为我的服务器位于 UNIX 套接字中 我不知道如何连接到它 我站在窗户上 如果我的服务器采用 TCP IP 下面的代码可以正常工作 My code
  • JQuery:ajax 请求时出现“未捕获类型错误:非法调用”

    我正在使用这个 AJAX 函数将我的表单发布到特定的 URL 它正在获取所需的 URL 并进行处理 但是当它返回结果时 它会给出错误
  • 如何避免实体框架 4.3.1 中的重复插入

    我有一个使用代码优先方法创建的小模型 一个类City其中仅包含有关城市名称的信息 public class City public City Posts new List
  • 将 System.Drawing.Icon 转换为 Microsoft.UI.Xaml.ImageSource

    存在将 System Drawing Icon 转换为 System Media ImageSource 将 System Drawing Icon 转换为 System Media ImageSource 但是当我使用WinUI而不是WP
  • 将 InkCanvas 笔画转换为字节数组并再次转换回来

    我正在开发一个程序 它将 inkcanvas 笔划转换为字节数组进行加密 然后将其保存在 txt 文件中 本质上我需要将字节数组转换为 inkcanvas 笔划 我已经完成了代码的前半部分 它将 inkcanvas 笔划转换为字节数组 pr