指纹图像转换为字节C#

时间:2016-10-06 09:54:03

标签: c# sql-server

我一直在做一个指纹项目。下面的代码可以将指纹图像转换为字节数组,但是如果你使用三个人的指纹,将提交的值是相同的值,它不是唯一的。它应该是每人独一无二的,因为我们需要用它来验证每个人。任何帮助将不胜感激。

public void btnSave_Click(object sender, EventArgs e)
{
    @fname = txtfname.Text;
    @lname = txtlname.Text;

    byte[] @img1 = Encoding.UTF8.GetBytes(Convert.ToString(pictureBox1.Image));    

    con = new SqlConnection(@"Data Source=DESKTOP-400N4CL;Initial Catalog=test;Integrated Security=True");
    con.Open();

    cmd = new SqlCommand("INSERT INTO dbo.fingerp " + " (fname,lname,finprint) " + " VALUES(@fname,@lname,@img1)", con);
    cmd.Parameters.AddWithValue("@fname", txtfname.Text);
    cmd.Parameters.AddWithValue("@lname", txtlname.Text);
    cmd.Parameters.AddWithValue("@img1", @img1);

    cmd.ExecuteNonQuery();

    MessageBox.Show("Your details is captured successfully");
    ////txtfname.Text = "";
    txtlname.Text = "";
    pictureBox1.Image = null;
}

1 个答案:

答案 0 :(得分:2)

Convert.ToString()不会获取图像的字节数组,而是类型(System.Drawing.Bitmap)。尝试使用此方法将图像转换为字节数组:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
     using (var ms = new MemoryStream())
     {
           imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
           return ms.ToArray();
     }
}

无论如何,如果您要将存储的图像与新的图像进行比较以进行识别,这是不可行的,我担心,因为相同指纹的2个扫描图像不会共享相同的图像字节。

修改

在您的评论中,您说您还有另一个问题:将字节数组添加到参数时,行未被保存。您无法使用AddWithValue执行该操作,您需要为此参数执行以下操作:

cmd.Parameters.Add(new SqlParameter("@img1", SqlDbType.VarBinary,0, ParameterDirection.Input, false, 0, 0, "img1", DataRowVersion.Current, DBNull.Value));

有关详细信息,请参阅this answer