我正在尝试在应用程序中实现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应用程序:
一个按钮(btnConvertToSVG)和一个PictureBox,我在其中打印生成的图像。它利用了libraries项目中包含的jSignature
在我的应用程序中粘贴base30代码会给我下一个结果:
我不明白为什么,但是两个签名之间唯一的共同之处是行数。
该库有一些分支,brinley是其中的一个(最近更新),而willowsystems是我没有成功的尝试。
答案 0 :(得分:2)
我终于解决了这个问题,这要归功于另一个SO question谈论同样的问题。错误出在库中,无法转换为jSignature项目中包含的SVG。
将String.Format
添加错误转换为最终结果时,所有Culture
都将忽略String
,您可以通过在开头将CultureInfo.InvariantCulture
添加到所有错误中来修复错误
String.Format(CultureInfo.InvariantCulture, ...)