Diskuze: Porovnávání dvou obrázků (pixely) - ArgumentOutOfRangeException

C# .NET .NET (C# a Visual Basic) Porovnávání dvou obrázků (pixely) - ArgumentOutOfRangeException American English version English version

Aktivity (1)
Avatar
Filistin
Člen
Avatar
Filistin:20.5.2016 22:46

Zdravim.
Chtěl bych poprosit o radu.
Vytvářím pexeso a po kliknutí pak porovnávám dva obrázky
- tímto kódem:

private bool Compare2Images (Image img1, Image img2)
       {
           bool same = true;
           string px1="";
           string px2="";
           for (int i = 0; i < maxSize; i++) //maxSize - velikost obrazku
           {
               for (int j = 0; j < maxSize; j++)
               {

                       px1 = (img1 as Bitmap).GetPixel(i, j).ToString();
                       px2 = (img2 as Bitmap).GetPixel(i, j).ToString();

                   if (px1 != px2)
                   {
                       same = false;
                       break;
                   }
               }
               if (px1 != px2)
                   break;
           }
           return same;
       }

Projíždí to pixel po pixelu a ihned je porovná - jakmile nejsou stejné - cyklus končí a vrátí mi false hodnotu.

Problém je, že mi to občas vyhodí vyjímku System.Argumen­tOutOfRangeEx­ception
hned vlastně u toho řádku px1 = (img1 as Bitmap).GetPixel(i, j).ToString();, ale nemám tušení, v čem by mohl být problém.
Neděje se to pokaždé, takže je trochu problém si to nakrokovat.

Díky

 
Odpovědět 20.5.2016 22:46
Avatar
Filistin
Člen
Avatar
Filistin:20.5.2016 23:48

Právě jsem zjistil, že se mi to děje pouze u jednoho obrázku - respektive - pokud rozkliknu jeden a k němu druhý do páru - vypíše to vyjímku - ostatní obrázky se mi bez porblému určí jako stejné a vyjímka nevyskočí.
Může být snad nejaký problém v tom přetypování na Bitmapu?

Editováno 20.5.2016 23:48
 
Nahoru Odpovědět 20.5.2016 23:48
Avatar
Elisse
Člen
Avatar
Odpovídá na Filistin
Elisse:21.5.2016 13:20

Trošku koment mimo, ale máš nějaké specifické zadání proč to dělat takto? Nebylo by jednodušší každému obrázku přidat proměnou ID a porovnávat jen je? za předpokladu, že je to předem nastavené pexeso?

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 21.5.2016 13:20
Avatar
Filistin
Člen
Avatar
Odpovídá na Elisse
Filistin:21.5.2016 14:36

Máš pravdu. Většinou mě napadne jedna věc a jdu jí hned zrealizovat, místo abych si to rozmyslel a vyřešil to nějak efektivněji. Díky :)

private bool Compare2Images(Card img1, Card img2)
        {
            return img1.ID == img2.ID;
        }
 
Nahoru Odpovědět 21.5.2016 14:36
Avatar
Elisse
Člen
Avatar
Odpovídá na Filistin
Elisse:21.5.2016 15:30

Přesně takhle no :) není zač

 
Nahoru Odpovědět 21.5.2016 15:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.