2017-09-17 29 views
0

2つの画像を比較して、画像のピクセル値をチェックして同じ画像であるかどうかを確認したいのですが、 DBには、画像がBLOBタイプとして保存された列を持つテーブルがあります。"パラメータが有効でない"例外を解決する方法

画像ボックスに画像をアップロードし、画像ボックス画像の画素値がDBの画像の画素値と類似している場合、その画像をDBと照合して「CID」という列の値を取り出す。

コードはC#で、MySqlとVisualStudioを使用しています。

しかし、それはParameter is not valid

の例外を与える私はここで間違って何をしているのですか?どんな助けも高く評価されます。

private void search_botton_Click_1(object sender, EventArgs e) 
{ 
     if (leftRadio.Checked == true) 
     { 
      try 
      { 

       string MyConnection = "datasource=127.0.0.1;port=3306;username=root;password=;database=ahbis"; 
       string sql = "SELECT * FROM criminal"; 


       MySqlConnection MyConn = new MySqlConnection(MyConnection); 
       MySqlCommand MyCommand = new MySqlCommand(sql, MyConn); 
       MySqlDataReader MyReader; 
       MyConn.Open(); 
       MyReader = MyCommand.ExecuteReader(); 

       while (MyReader.Read()) 
       { 
        //byte[] should be converted to Bitmap 

        byte[] img_Byte = (byte[])(MyReader["palmHistogram_A_L"]); 

        Image img1_IMAGE = (Bitmap)((new ImageConverter()).ConvertFrom(img_Byte)); 
        //img1 = new Bitmap(img1_IMAGE); 

        Bitmap img1 = (Bitmap)new ImageConverter().ConvertTo(img1_IMAGE, typeof(Bitmap[])); 


        img2 = new Bitmap(histogram_pictureBox.Image); 

        string img1_ref, img2_ref; 

        if (img1.Width == img2.Width && img1.Height == img2.Height) 
        { 
         for (int i = 0; i < img1.Width; i++) 
         { 
          for (int j = 0; j < img1.Height; j++) 
          { 
           img1_ref = img1.GetPixel(i, j).ToString(); 
           img2_ref = img2.GetPixel(i, j).ToString(); 
           if (img1_ref != img2_ref) 
           { 
            count2++; 
            flag = false; 
            break; 
           } 
           count1++; 
          } 

         } 

         if (flag == false) 
          MessageBox.Show("No matches found!"); 

         else 
          MessageBox.Show("Match found!"); 

          string cid = MyReader.GetString("CID"); 
          textBox1.Text = cid; 
        } 
        else 
         MessageBox.Show("Something went wrong!"); 

       } 
       MyConn.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     } 
    } 

コードには次の部分もあります。

Bitmap img1,img2; 
int count1 = 0, count2 = 0; 
bool flag = true; 
+0

例外をどのラインで取得しますか? –

+0

@AnkitVijay - "System.ArgumentException"がSystem.Drawing.dllの行にありました;ビットマップimg1 =(ビットマップ)tc.ConvertFrom(img_Byte); –

+0

あなたはここを見ましたか?https://stackoverflow.com/questions/629955/parameter-not-valid-exception-loading-system-drawing-image –

答えて

-1

私はbase64文字列に変換することをお勧めします。 下のWebサイトのリンクを参照してください。画像をBase64に変換するのに役立ちます

私はそれが助けになることを望みます。

my Website link here.

+0

あなたのユーザー名と同じまたはリンクされているリンクのドメイン/ URLに基​​づいて、リンクされているように見えます参照してください:[**何が「良い」自己宣伝を意味するのでしょうか?あなたのサイトにあなたのサイト*を開示しなければなりません。 **](// meta.stackexchange.com/q/182212)と[スパマーにならない方法](// stackoverflow.com/help/promotion) – Makyen

+0

これは実際にOPが尋ねた問題をどのように解決しますか約? – Makyen

+0

本当にここで助けることができるかどうかは分かりません。まだ試していませんが、代わりにそれをピクセルを使って比較する。それを文字列に変換して比較してみましょう。これにより、比較が容易になるだろう。 –

関連する問題