字符串到byte []和byte []到.NET中的图像

时间:2013-09-07 04:51:42

标签: c# .net fingerprint

我正在使用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)我得到“参数无效”。异常。

4 个答案:

答案 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);
    }