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

Avatar
Filistin
Člen
Avatar
Filistin:

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. května 22:46
Avatar
Filistin
Člen
Avatar
Filistin:

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. května 23:48
 
Nahoru Odpovědět 20. května 23:48
Avatar
Elisse
Člen
Avatar
Odpovídá na Filistin
Elisse:

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. května 13:20
Avatar
Filistin
Člen
Avatar
Odpovídá na Elisse
Filistin:

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. května 14:36
Avatar
Elisse
Člen
Avatar
Odpovídá na Filistin
Elisse:

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

 
Nahoru Odpovědět 21. května 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.