我正在使用NITGEN's Fingkey Hamster DX来捕捉指纹。
我已将指纹数据转换为文本格式,它给出了如下字符串(下面代码中的字符串“sr”给出了这个字符串):
AQAAABQAAAAEAQAAAQASAAEAZAAAAAAA * AAAAOHbWlAewfLK7kOnScKzeN5HMVcDmjce0KPkeqyeiWEdTnJutHvnhyrnkW9OPbQNQc7 / 94lnozdd3Zz8RKiRSj8HHdCMZ8XIdaCy0tCxp2wLwRbVrHl14QkJlQMGqeJyzu06h / ZorwN5vVoxuzFDM9dKyqlm85XHuOeoeACxO / xZrE3NdH4aesbYWgy2i5Cru2AHymemLVeu7BX5BRgFkRrx6JzcZpW9Jn0r3GOkdSqGZG85soUxNX4GN * 4gJlqjfCg81cDZAi5NqiEosZjJUXwZ2677ll3OCOUaS31 / 7v7qF9NN1XdlNc1hrI8kQfmtbRNM3EOybwAoFTHG76rqRos
我尝试使用以下代码将此字符串转换为byte[]
数组:
textFIR = new NBioAPI.Type.FIR_TEXTENCODE();
UInt32 r = m_NBioAPI.GetTextFIRFromHandle(hCapturedFIR, out textFIR, true);
string sr = "";
if (textFIR != null)
{
sr = textFIR.TextFIR;
byte[] src = new byte[sr.Length*sizeof(char)];
System.Buffer.BlockCopy(sr.ToCharArray(),0,src,0,src.Length);
MemoryStream ms = new MemoryStream(src);
System.Drawing.Image FP = System.Drawing.Image.FromStream(ms);
FP.Save("G:\\TempFP.Jpeg", ImageFormat.Jpeg);
}
但在Image.FromStream(ms)
我得到“参数无效”。异常。
答案 0 :(得分:1)
虽然我没有使用您正在使用的特定库的经验,但我可以看到您的代码存在一些明显的问题,并期望它们导致问题。检查代码的这两行:
string sr = "";
byte[] src = new byte[sr.Length*sizeof(char)];
sr
此时是一个空字符串,因此sr.Length将为零,字节数组也将为零长度,因此BlockCopy
将无法向其写入任何内容。您应该在行if
之后的sr = textFIR.TextFIR;
块内移动第二行。
答案 1 :(得分:1)
TextFIR
成员中的文本既不是有效的base64编码数据,也不是图像数据。
它是一个多字节文本数据,用于存储和验证其他FIR。
使用NImgConv.dll中的API从FIR数据中获取图像。
答案 2 :(得分:0)
您应该尝试使用FromBase64string方法将其转换为字节数组。
public static byte[] StringToBytes(string streamString)
{
return Convert.FromBase64String(streamString);
}
要确保您的base64string有效,您可以将其检查为
<img alt="" src="data:image/jpeg;base64,**your base 64 string**" />
查看this链接了解详情。
答案 3 :(得分:0)
我认为您的字符串是Base64格式,因此您可以使用此函数将字符串转换为Bytes [],然后使用另一个函数将Bytes []转换为图像。
internal bool SaveBytesToFile(string fileFullPath, byte[] stream)
{
if (stream.Length == 0) return false;
try
{
try
{
using (FileStream fileStream = System.IO.File.Create(fileFullPath, (int)stream.Length))
{
fileStream.Write(stream, 0, stream.Length);
}
}
catch (Exception ex)
{
//Write Error log
errorhandler.Write(ex);
return false;
}
return true;
}
catch (Exception ex)
{
//Write Error log
errorhandler.Write(ex);
return false;
}
}
internal byte[] StringToBytes(string streamString)
{
return Convert.FromBase64String(streamString);
}
internal string BytesToString(byte[] stream)
{
return Convert.ToBase64String(stream);
}