2016-05-20 7 views
0

画像ボックスを使用して2つの画像を比較しようとしていますが、問題が発生しました:選択した画像名を関数のパラメータとして文字列として渡すにはどうすればよいですか?C#でパラメータとしてファイルダイアログインスタンスを渡す方法

画像のパスと名前をstring name1string name2として保存しますが、パラメータとして渡すと問題が発生します。

以下は私のコードです。私が間違っている場所を教えてください。

private void pictureBox1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog ofd1 = new OpenFileDialog(); 
    ofd1.Title = "Select User Profile Image"; 
    ofd1.Filter = "Image File(*.png;*.jpg;*.bmp;*.gif)|*.png;*.jpg;*.bmp;*.gif"; 
    if (ofd1.ShowDialog() == DialogResult.OK) 
    { 
     pictureBox1.Image = new Bitmap(ofd1.FileName); 
     string name1 = ofd1.FileName; 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Compare(name1,name2); 
} 

public void Compare(string bmp1, string bmp2, byte threshold = 3) 
{ 
    Bitmap firstBmp = (Bitmap)Image.FromFile(bmp1); 
    Bitmap secondBmp = (Bitmap)Image.FromFile(bmp2); 
    firstBmp.GetDifferenceImage(secondBmp, true); 
    string result = string.Format("Difference: {0:0.0} %", firstBmp.PercentageDifference(secondBmp, threshold) * 100); 
} 
+0

に便利です「しかし、私は問題を抱えたとき、私パラメータとして渡す "あなたの問題の性質はどういうものですか? –

+0

名前1と名前2(あなたのコードにname2フィールドはありません)は、button1_Click()でアクセスできません。それらをグローバルにしましょう。 – Jamaxack

答えて

4

あなたはpictureBox1_Click()内の変数name1if内部文を作成します。

public YourClass 
{  
    string name1 = String.Empty: 

    //..... your code 

    private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd1 = new OpenFileDialog(); 
     ofd1.Title = "Select User Profile Image"; 
     ofd1.Filter = "Image File(*.png;*.jpg;*.bmp;*.gif)|*.png;*.jpg;*.bmp;*.gif"; 
     if (ofd1.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox1.Image = new Bitmap(ofd1.FileName); 
      name1 = ofd1.FileName; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Compare(name1,name2); 
    } 

    public void Compare(string bmp1, string bmp2, byte threshold = 3) 
    { 
     Bitmap firstBmp = (Bitmap)Image.FromFile(bmp1); 
     Bitmap secondBmp = (Bitmap)Image.FromFile(bmp2); 
     firstBmp.GetDifferenceImage(secondBmp, true); 
     string result = string.Format("Difference: {0:0.0} %", firstBmp.PercentageDifference(secondBmp, threshold) * 100); 
    } 
} 

あなたはname2を同じように作成した場合、あなたはあまりにもそれクラスレベルの変数を作成する必要があります。name1のみifブロックの内側に表示されているので、あなたは、button1_Click()内でそれを使用するには、クラスレベルの変数を作成する必要があります。

+0

絶対完全性については、それらを使用しようとする前に空の文字列を 'name1'画像をロードする。 – Jamiec

+0

Jamiec画像を読み込む方法は? – user5832488

0

あなたはファイルパス保存するためにあなたのFormにメンバ変数を宣言することができます。

public partial class YourForm : Form 
{ 
    private string _imagePath1; 
    private string _imagePath2; 

    private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog ofd1 = new OpenFileDialog(); 
     // ... your code 
     if (ofd1.ShowDialog() == DialogResult.OK) 
     { 
      pictureBox1.Image = new Bitmap(ofd1.FileName); 
      // SAVE PATH TO CLASS MEMBER 
      _imagePath1 = ofd1.FileName; 
     } 
    } 
    private void button1_Click(object sender, EventArgs e) 
    { 
     // USE CLASS MEMBERS 
     Compare(_imagePath1, _imagePath2); 
    } 
}  
+0

?そのdownvoteは何ですか? –

+0

誰かがあなたの答えをコピーしたと思っているかもしれません:P:D – SamGhatak

+1

か、名前付け規則の破壊のような人はいないでしょう! (たとえOPがそれを得たとしても) – Jamiec

関連する問題