我试图在我的应用程序中实现jSignature library,但无法使其正常工作,实际的问题是尝试从base30文本重新创建原始图像。为了做到这一点,我在他们的demo中绘制了一些内容,将base30文本粘贴到我的应用中,但是生成的图像几乎与原始图像无关。我的示例应用程序的代码是这样的:

    private void BtnConvertToSVG_Click(object sender, EventArgs e)
    {
        convertFromBase30();
    }

    private void convertFromBase30()
    {
        try
        {
            jSignature.Tools.Base30Converter Base30 = new jSignature.Tools.Base30Converter();
            String base30Text = tbBase30Text.Text.ToString();
            int[][][] arrBase30 = Base30.Base30ToNative(base30Text);
            String strSVG = jSignature.Tools.SVGConverter.ToSVG(arrBase30);
            tbSVG.Text = strSVG;
            MemoryStream s = new MemoryStream(Encoding.ASCII.GetBytes(strSVG));
            SvgDocument mySVG = SvgDocument.Open<SvgDocument>(s, null);
            var tempStream = new System.IO.MemoryStream();
            mySVG.Draw().Save(tempStream, System.Drawing.Imaging.ImageFormat.Png);
            System.Drawing.Image img = System.Drawing.Image.FromStream(tempStream);
            pbImage.Image = img;
        }
        catch (Exception ex)
        {
            MessageBox.Show(String.Format("{0}", ex.Message));
        }
    }


它是带有两个TextBox的Windows Forms应用程序:


tbBase30Text:在这里我介绍base30文本
tbSVG:应用程序在其中写入SVG图片代码的位置


我在其中打印生成的图像的一个按钮(btnConvertToSVG)和一个PictureBox。它利用了libraries项目中包含的jSignature

如果我在他们的演示中绘制SO图像,它将给我下一个结果
c# - 我无法从Base30文本jSignature表示形式还原原始图像-LMLPHP

将base30代码粘贴到我的应用程序中可以得到下一个结果:

c# - 我无法从Base30文本jSignature表示形式还原原始图像-LMLPHP

我不明白为什么,但是两个签名之间唯一的共同之处是行数。

这个库有一些分支,我尝试过的brinley分支(最后更新)和willowsystems分支没有成功。

最佳答案

我终于解决了这个问题,这要归功于另一个SO question谈论同样的问题。错误出在库中,无法转换为jSignature项目中包含的SVG。

String.Format添加错误转换为最终结果时,所有Culture都会忽略String,您可以通过在开始时将CultureInfo.InvariantCulture添加到所有错误中来修复它

String.Format(CultureInfo.InvariantCulture, ...)

08-19 06:12