首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中将文件对话框实例作为参数传递

如何在C#中将文件对话框实例作为参数传递
EN

Stack Overflow用户
提问于 2016-05-20 17:27:39
回答 3查看 305关注 0票数 0

我尝试使用图片框来比较两张图片,但我遇到了一个问题:如何将所选图片名称作为参数传递给函数作为字符串?

我将图片路径和名称保存为string name1string name2,但当我将它们作为参数传递时,我遇到了一个问题。

下面是我的代码。请告诉我我哪里错了。

代码语言:javascript
复制
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);
}
EN

回答 3

Stack Overflow用户

发布于 2016-05-20 17:34:45

您可以在pictureBox1_Click()中的if语句中创建变量name1。您应该创建类级别变量以在button1_Click()中使用它,因为name1仅在if块中可见:

代码语言:javascript
复制
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,你也应该让它成为类级别的变量。

票数 4
EN

Stack Overflow用户

发布于 2016-05-20 17:35:08

您可以在Form中声明一个成员变量来保存文件路径:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-05-20 17:49:20

我认为下面的URL对你有帮助

http://www.c-sharpcorner.com/uploadfile/prathore/image-comparison-using-C-Sharp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37342979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档