Niin siitä täyttö työkalusta:
Code: Select all
Type FILL_DOT
Field x%
Field y%
EndType
Function Fill(img,x,y)
imW=ImageWidth(img)
imH=ImageHeight(img)
buff=Image(img)
Lock buff
col%=(getRGB(BLUE)+(getRGB(GREEN) Shl 8)+(getRGB(RED)Shl 16)+(255 Shl 24))
rep%=GetPixel2(x,y,buff)
PutPixel2 x,y,col,buff
pix.FILL_DOT=New(FILL_DOT)
pix\x=x
pix\y=y
While Last(FILL_DOT)<>NULL
Clock=Clock Xor 1
If Clock Then ipix.FILL_DOT=Last(FILL_DOT) Else ipix.FILL_DOT=First(FILL_DOT)
If GetPixel2(ipix\x+1,ipix\y,buff)=rep% And ipix\x<imW
pix.FILL_DOT=New(FILL_DOT)
pix\x=ipix\x+1
pix\y=ipix\y
PutPixel2 pix\x,pix\y,col,buff
EndIf
If GetPixel2(ipix\x,ipix\y-1,buff)=rep% And ipix\y>0
pix.FILL_DOT=New(FILL_DOT)
pix\x=ipix\x
pix\y=ipix\y-1
PutPixel2 pix\x,pix\y,col,buff
EndIf
If GetPixel2(ipix\x-1,ipix\y,buff)=rep% And ipix\x>0
pix.FILL_DOT=New(FILL_DOT)
pix\x=ipix\x-1
pix\y=ipix\y
PutPixel2 pix\x,pix\y,col,buff
EndIf
If GetPixel2(ipix\x,ipix\y+1,buff)=rep% And ipix\y<imH
pix.FILL_DOT=New(FILL_DOT)
pix\x=ipix\x
pix\y=ipix\y+1
PutPixel2 pix\x,pix\y,col,buff
EndIf
Delete ipix
Wend
Unlock buff
EndFunction
Siinä on nopein täyttöfunktio cb:lle minkä tiedän. Kaivoin sen esillä Animaattorin sorsista(löytyvät ihan samasta paketista exen kanssa). Kyllä siinä vähän aikaa täyttämisessä menee, mutta on se reippaasti nopeampi kuin tuo sinun, varsinkin jos alue on todella iso. Funktio ei ole itse tekemäni, muistelen että joku antoisen minulle, mutta en kyllä muista kuka...(olisiko ollut JATothrim?) Sinun voisi kannattaa vilkaista Animaattorin sorsia, niistä voisi löytyä jotain muutakin hyödyllistä.
Niin ja voisit tehdä tuon yläpalkin avattu valikko vaihtuu, kun hiiri siirretään toisen yläpalkin napin päälle. Mutta todella hienon näköinen. Pidä tämän ulkonäöstä.
