Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何比较两个picturebox阵列?_C#_.net - Fatal编程技术网

C# 如何比较两个picturebox阵列?

C# 如何比较两个picturebox阵列?,c#,.net,C#,.net,我已经在这个应用程序上工作了很长时间。它有它的缺点,比如,我可以使用2d数组,而不是使用数组,但是要进入下一行而不把事情搞糟是很困难的。我在一边有6个图片盒阵列,在另一边有相同的东西。在底部,我有一系列可用的图片,它们是正确的组合。当我试图将正确的组合与用户选择的组合进行比较时,出现了问题。这是我的密码: private void button1_Click(object sender, EventArgs e) { if (pb0.Image.ToStrin

我已经在这个应用程序上工作了很长时间。它有它的缺点,比如,我可以使用2d数组,而不是使用数组,但是要进入下一行而不把事情搞糟是很困难的。我在一边有6个图片盒阵列,在另一边有相同的东西。在底部,我有一系列可用的图片,它们是正确的组合。当我试图将正确的组合与用户选择的组合进行比较时,出现了问题。这是我的密码:

private void button1_Click(object sender, EventArgs e)
    {


            if (pb0.Image.ToString() == pb24.Image.ToString())
            {
                nizKomb[0].Image = Image.FromFile(@"Slike\crvena.png");
            }

            if(pb1.Image.ToString() == pb25.Image.ToString())
        {
            nizKomb[1].Image = Image.FromFile(@"Slike\crvena.png");
        }
            if(pb2.Image.ToString() == pb26.Image.ToString())
        {
            nizKomb[2].Image = Image.FromFile(@"Slike\crvena.png");
        }
            if(pb3.Image.ToString() == pb27.Image.ToString())
        {
            nizKomb[3].Image = Image.FromFile(@"Slike\crvena.png");
        }



        btnOK2.Visible = true;
        ctrl = 1;
    }

    private void btnOK2_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < 4; i++)
        {
            if (boxes2[i].Image.RawFormat == kombinacija[i].Image.RawFormat)
            {
                nizKomb2[i].Image = Image.FromFile(@"Slike\crvena.png");
            }

        }

        if (boxes2[0].Image == null || boxes2[1].Image == null || boxes2[2].Image == null || boxes2[3].Image == null)
        {
            MessageBox.Show("Unesite kombinaciju.");
        }
        else if (boxes2[0].Image != null && boxes2[1].Image != null && boxes2[2].Image != null && boxes2[3].Image != null)
        {
            btnOK3.Visible = true;

            ctrl = 2;
        }
    }

如果您想再次解决这个问题,我有一个名为TransparencyMaker的C类,它可以将Jpeg或Png文件转换为PixelInformationDatabase

代码如下:

帮助您实现这一目标的部分是:

如果沿着页面向下滚动大约3/4,LoadPixelDatabase和LoadPixelDatabaseEx方法是相同的,但它接受位图参数

PixelInformation数据库只是PixelInformation对象的列表,此处列出了PixelInformation类:

基本像素信息只是一个包含RGB值、X&Y值以及一些信息的对象,例如总计,它只是RGB的总和,以及一些其他信息:

然后,如果你想比较你的两个数据库,当我画一条线擦除时,我会这样做。我删除了一个虚拟图像,然后找到了刚刚被删除的像素,然后将更改应用于真实图像

在这里,我找到了刚刚修改过的像素,因为我用图像中没有的颜色画了一条线

// Reload the PixelDatabase
PixelDatabase pixelDatabase = LoadPixelDatabaseEx(bitmap);

// Now get the pixels that are equal to the lineColor
List<PixelInformation> pixels = pixelDatabase.Pixels.Where(x => x.Color == LineColor).ToList();
然后你可以迭代你的两个列表来找到任何不同的像素,如果你找到了,你就知道你有变化

我需要为Transparency Maker记录帮助。欢迎任何志愿者

数据杂耍者
这里列出了我所有的开源项目。

我建议不要比较图片。反对在这里使用ToString!两者都非常缓慢和不可靠。相反,你应该在加载图像时存储必要的信息,也许把文件名放在pbox.Tag中。就像你说的,我把值放在标记中,然后用它来比较。非常感谢你!