no to tak:
W - dlugosc obrazka, H - wysokosc
zeby ustalic paramtery prostokata potrzebujemy znac takie piksele, jak:
pierwszy i ostatni od gory piksel, kto sie rozni
piksel najblizszylewej krawedzi i piksel najblizszy prawej krawedzi.
teraz pytanie, jak szukac? wydajnosc zalezy od tego, jak dostosujesz algorytm do tego obrazka. jezeli wiesz, ze obszary rozniace sie nie moga byc jednopikselowe, to nie ma sensu sprawdzac kazdej linijki. ale zalozmy, ze moga:
glowna petla wykonujaca sie 1/2H razy.
w je srodku porownujemy scanline'ami kolejne wiersze od dolu i od gory.
jezeli znajdziemy wiersze, ktore sie roznia, to wykonujemy taka sekcje:
{
petla wykonujaca sie 1/2W razy
porownujemy od lewej i od prawej poszczegolne piksele. jezeli znajdziemy 2 takie piksele, to petla sie konczy.
}
dobra, ale teraz optymaliacja do tego. dajmy na to, ze pierwszy roznicy pixel to [10,4].
na pewno prostokat bedzie zaczynal sie w punkcie [x,4].
niby x mozna znalezc, po prostu szukajac tak jak podalem, ale:
nie ma sensu przeszukiwac dalszych punktow niz: [0,4] - [9,4]
podobne ograniczenie szukania mozemy zastosowac od prawej strony, jezeli znamy ostatni pixel.
i jak wiadomo, jezeli znasz jakies cechy tych zmian, to mozna kombinowac i optymalizowac bardziej. troche juz pozno i nie chce mi sie zbytnio wnikac, ale chyba zwiekszenie ilosci scanline'ow moze tez przyspieszyc algorytm.