【问题标题】:Finger print Image conversion to byte C#指纹图像转换为字节 C#
【发布时间】:2016-10-06 09:54:02
【问题描述】:

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

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;
}

【问题讨论】:

  • 只有相同的图像才会相同。为什么 3 个不同的人会使用同一张图片 3 次?
  • Convert.ToString(pictureBox1.Image) 不获取图像数据 - 这就是为什么这些值都是相同的,因为它们基于字符串“System.Drawing.Bitmap”
  • 注意:您可能低估了比较指纹所涉及的逻辑。

标签: c# sql-server


【解决方案1】:

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 个扫描图像不会共享相同的字节。

编辑

在您的 cmets 中,您说您遇到了另一个问题:当您将字节数组添加到参数时,该行没有被保存。你不能用AddWithValue 来做,你需要这样的参数:

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

请参阅this answer 了解更多信息。

【讨论】:

  • 我以前尝试过这种方法,但它从来没有用过。我没有保存。也许我把它放在我的代码中的错误位置。你认为我把它放在哪里。或者我还能做些什么让它工作?
  • 如果没有保存,可能是因为你数据库中的colum类型...
  • 数据库中的colum类型为varbinary(max)
  • 使用上面的方法和更正后查看错误:附加信息:无法将值NULL插入列'finprint',表'test.dbo.fingerp';列不允许空值。插入失败。看代码安排:该方法放在 btn_save 方法之上,其中包含其他值,例如 fname 和 lname。
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多