检测图像框中使用的图像

时间:2014-05-07 12:49:08

标签: c# image picturebox

我也在尝试记忆游戏 在这个游戏中,当按下按钮时,按钮和图片框将被发送到列表中 我也想使用图片框内的图像作为一种方式使用此代码。但即使两个图像相同,代码也无法工作。有没有办法检查使用的图像Name.jpg

if(buttonCount == 2)
{
    if(pictureList[0].Image == pictureList[1].Image)
    {
        buttonCount = 0;
        buttonList.RemoveAt(0)
        buttonList.RemoveAt(0);
        pictureList.RemoveAt(0);
        pictureList.RemoveAt(0);
    }
}

2 个答案:

答案 0 :(得分:1)

您可以在Tag中保存图片的ID(例如您建议的文件名) 因此,当将图像加载到图片框中时:

string path = "PATH";
pictureBox.Image = Image.FromFile(path);
pictureBox.Tag = path;

然后你可以比较标签。

但我认为(请告诉我们你如何加载图片)这不能正常工作,因为你从磁盘上加载了两次图像:

pictureBox1.Image = Image.FromFile(path);
pictureBox2.Image = Image.FromFile(path);

因为那时你有不同的实例,所以equals返回false 如果你这样做,它也应该工作:

var image = Image.FromFile(path);
pictureBox1.Image = image;
pictureBox2.Image = image;

答案 1 :(得分:0)

在您当前的应用程序中,您没有足够的信息与图像对象相关联以识别它。因此,您需要扩展Image类以包含此信息或以其他方式存储它以进行比较。

扩展Image

public class GameImage : Image
{
    public static GameImage GetImage(string filename)
    {
        GameImage img = (GameImage)Image.FromFile(filename);
        img.FileName = filename;
        return img;
    }

    public string FileName { get; private set; }
}

然后比较变为

if(buttonCount == 2)
{
    if(((GameImage)pictureList[0].Image).FileName == ((GameImage)pictureList[1].Image).FileName)
    {
        buttonCount = 0;
        buttonList.RemoveAt(0)
        buttonList.RemoveAt(0);
        pictureList.RemoveAt(0);
        pictureList.RemoveAt(0);
    }
}

注意:注意测试!