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