Avatar
František Pastorek:

Snažím sa zostaviť program, ktorý zistí či sa v ľubovoľnom obrázku nachádza mnou vopred zvolený obrázok. Problém je však v tom, že keď si zoberiem nejaký obrázok, z neho vystrihnem časť tak tá časť má v konečnom dôsledku inú bitovú mapu ako tá časť v pôvodnom obrázku a nerozumiem prečo. V kóde porovnávam iba jednu zložku farby v pixeli. Nefunguje to ani s tým takže zatiaľ nemám dôvod porovnávať všetky tri zložky. Vopred ďakujem za akúkoľvek radu.

Bitmap b1 = new Bitmap("C:/Users/stolnyPC/Desktop/img1.png");
Bitmap b2 = new Bitmap("C:/Users/stolnyPC/Desktop/img2.png");

BitmapData b1Data = b1.LockBits(new Rectangle(0, 0, b1.Width, b1.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
BitmapData b2Data = b2.LockBits(new Rectangle(0, 0, b2.Width, b2.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

byte[] cur1 = new byte[b1Data.Width * b1Data.Height];
byte[] cur2 = new byte[b2Data.Width * b2Data.Height];

Marshal.Copy(b1Data.Scan0, cur1, 0, b1Data.Width * b1Data.Height);
Marshal.Copy(b2Data.Scan0, cur2, 0, b2Data.Width * b2Data.Height);

for (int i = 0; i < b1Data.Width * b1Data.Height; i++)
{
    if (cur1[i] == cur2[0] && cur1[i+1] == cur2[1])
    {
        for (int j = 0, k = i; j < b2Data.Width * b2Data.Height; j++, k++)
        {
            if (cur1[k] == cur2[j])
            {
                if (j == b2Data.Width * b2Data.Height - 1)
                {
                    label2.Text = "successful";
                    i = b1Data.Width * b1Data.Height;
                    break;
                }
                else if (j == b2Data.Width)
                    k += b1Data.Width - b2Data.Width - 1;
            }
            else
                break;
        }
    }
}

b1.UnlockBits(b1Data);
b2.UnlockBits(b2Data);
 
Odpovědět 22. ledna 16:42
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 1 zpráv z 1.