Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

Aktivity
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
Odpovídá na Filistin
Erik Šťastný: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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
21.5.2016 13:20
Avatar
Filistin
Člen
Avatar
Odpovídá na Erik Šťastný
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
Odpovídá na Filistin
Erik Šťastný: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.