CreateImageOutline Function
Übersicht

![]() |
ToeBBetreff: CreateImageOutline Function |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mal eine Function gebastelt mit der man einen Umriss von einem Image nehmen kann (Es wird direkt in ein anderes Image gespeichert) :
CreateImageOutline%(imgHandle%,maskRed%,maskGreen%,maskBlue%,lineRed%,lineGreen%,lineBlue%[,frame%]) Die Parameter : ![]() ![]() ![]() ![]() ![]() Die Function : (Die Function GetHex() ist für die Haubtfunction wichtig !) Code: [AUSKLAPPEN] Function CreateImageOutline(imgHandle,maskRed=255,maskGreen=0,maskBlue=255,lineRed=255,lineGreen=255,lineBlue=255,frame=0)
Local width = ImageWidth( imgHandle) Local height= ImageHeight(imgHandle) Local imgUmriss = CreateImage(width,height) Local maskColor = GetHex(maskRed,maskGreen,maskBlue) Local lineColor = GetHex(lineRed,lineGreen,lineBlue) LockBuffer ImageBuffer(imgHandle,frame) LockBuffer ImageBuffer(imgUmriss) ;Senkrecht : For x = 0 To width For y = 0 To height pix_o = ReadPixelFast(x,y,ImageBuffer(imgHandle,frame)) pix_u = ReadPixelFast(x,y+1,ImageBuffer(imgHandle,frame)) If pix_o = maskColor And pix_u <> maskColor And y < height-1 Then WritePixelFast(x,y,lineColor,ImageBuffer(imgUmriss)) EndIf If pix_o <> maskColor And pix_u = maskColor And y < height-1 Then WritePixelFast(x,y+1,lineColor,ImageBuffer(imgUmriss)) EndIf Next Next ;Waagerecht : For y = 0 To height For x = 0 To width pix_l = ReadPixelFast(x,y,ImageBuffer(imgHandle,frame)) pix_r = ReadPixelFast(x+1,y,ImageBuffer(imgHandle,frame)) If pix_l = maskColor And pix_r <> maskColor And x < width-1 Then WritePixelFast(x,y,lineColor,ImageBuffer(imgUmriss)) EndIf If pix_l <> maskColor And pix_r = maskColor And y < height-1 Then WritePixelFast(x+1,y,lineColor,ImageBuffer(imgUmriss)) EndIf Next Next UnlockBuffer ImageBuffer(imgHandle,frame) UnlockBuffer ImageBuffer(imgUmriss) Return imgUmriss End Function Function GetHex(red,green,blue) Local Hexa Hexa = 255*$1000000 + red*$10000 + green*$100 + blue Return Hexa End Function Das Beispiel : (Dazu braucht ihr das bild hier.) [code;********************************************************************************************************************* ;// Test zur Function "CreateImageOutline()" ************************************************************************* ;// BY CRACK93 ******************************************************************************************************* ;********************************************************************************************************************* Graphics 400,400,16,2 AppTitle "Function CreateImageOutline" Global TestImg = LoadAnimImage("Fig1.png",50,100,0,22):MaskImage TestImg,255,0,255 Global Umriss = CreateImage(50,100,22) For i = 0 To 21 SetBuffer ImageBuffer(Umriss,i) b=CreateImageOutline(TestImg,255,0,255,255,255,255,i) DrawImage b,0,0 Next SetBuffer BackBuffer() ClsColor 100,100,100 f = 0 ms = MilliSecs() Repeat Text 100,1,"Leertaste => eine FRAME weiter" If KeyDown(57) Then If MilliSecs() > ms + 200 Then f = (f+1) Mod 22 ms = MilliSecs() DrawImage TestImg,0,0,f DrawImage Umriss,0,ImageHeight(TestImg)+10,f ;VWait() Flip Cls Until KeyHit(1) End[/code] Freue mich über gut Kritik ![]() (Also wäre schön wenn ihr euch dazu äßern könntet...) mfg Crack93 |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich packs nicht...
Ich hatte vor, die Funktion ein wenig zu überarbeiten... Sie schneller zu machen. und was muss ich bemerken? Mein System ist doch glatt 10 bis 20ms langsamer ![]() Ich hatte es so umgeschrieben: Code: [AUSKLAPPEN] Function CreateImageOutline(imgHandle,maskRed=255,maskGreen=0,maskBlue=255,lineRed=255,lineGreen=255,lineBlue=255,frame=0)
Local x,y,pix_o,pix_u,pix_l,pix_r Local width = ImageWidth( imgHandle) Local height= ImageHeight(imgHandle) Local imgUmriss = CreateImage(width,height) Local maskColor = 255*$1000000 + maskRed*$10000 + maskGreen*$100 + maskBlue Local lineColor = 255*$1000000 + lineRed*$10000 + lineGreen*$100 + lineBlue Local handlebuffer=ImageBuffer(imgHandle,frame) Local umrissbuffer=ImageBuffer(imgUmriss) LockBuffer handlebuffer LockBuffer umrissbuffer For x = 0 To width For y = 0 To height pix_o = ReadPixelFast(x,y,handlebuffer) pix_u = ReadPixelFast(x,y+1,handlebuffer) pix_l = ReadPixelFast(x,y,handlebuffer) pix_r = ReadPixelFast(x+1,y,handlebuffer) If y<height-1 Then If pix_o = maskColor And pix_u <> maskColor Then WritePixelFast(x,y,lineColor,umrissbuffer) EndIf If pix_o <> maskColor And pix_u = maskColor Then WritePixelFast(x,y+1,lineColor,umrissbuffer) EndIf If pix_l <> maskColor And pix_r = maskColor Then WritePixelFast(x+1,y,lineColor,umrissbuffer) EndIf EndIf If pix_l = maskColor And pix_r <> maskColor And x < width-1 Then WritePixelFast(x,y,lineColor,umrissbuffer) EndIf Next Next UnlockBuffer handlebuffer UnlockBuffer umrissbuffer Return imgUmriss End Function Dabei würde theoretisch der erneute Durchlauf erspart werden, es würde auf eine Var anstatt auf eine Funktion zurückgegriffen werden bei ImageBuffer und die Abfrage hab ich auch ganz fein umstrukturiert... und das bringt nix... Naja, gut gemacht Cracky ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group