Seite 1 von 1

Grafik-Zeug

Verfasst: 08.11.2007 16:25
von X0r
Hier paar kleine Spielereien für einige brauchbare 2D Effekte:

Code: Alles auswählen

Procedure ConvertToOneBit(image)
  StartDrawing(ImageOutput(image))
  
  For x = 0 To ImageWidth(image)-1
    For y = 0 To ImageHeight(image)-1
      rgb=Point(x,y)
      If Red(rgb)+Green(rgb)+Blue(rgb)>383
        f = 255
      Else
        f = 0
      EndIf
      
      Plot(x, y,RGB(f,f,f))
    Next
  Next
  StopDrawing()
EndProcedure

Procedure ConvertToMosaic(image,xa,ya,width,height,stp)
Protected xdes=xa+width,ydes=ya+height
StartDrawing(ImageOutput(image))
  
  For x = xa To xdes Step stp
    For y = ya To ydes Step stp
      rgb=Point(x,y)
      
      Box(x, y,stp,stp,RGB(Red(rgb),Green(rgb),Blue(rgb)))
    Next
  Next
  
  StopDrawing()
EndProcedure

Procedure ConvertToNegativ(image)
  StartDrawing(ImageOutput(image))
  
  For x = 0 To ImageWidth(image)-1
    For y = 0 To ImageHeight(image)-1
      rgb=Point(x,y)
      Red=255-Red(rgb)
      Green=255-Green(rgb)
      Blue=255-Blue(rgb)
      
      Plot(x, y,RGB(Red,Green,Blue))
    Next
  Next
  StopDrawing()
EndProcedure

Procedure ConvertToBW(image)
  StartDrawing(ImageOutput(image))
  
  For x = 0 To ImageWidth(image)-1
    For y = 0 To ImageHeight(image)-1
      rgb=Point(x,y)
      Col=(Red(rgb)+Green(rgb)+Blue(rgb))/3
      Plot(x, y,RGB(Col,Col,Col))
    Next
  Next
  
  StopDrawing()
EndProcedure

Procedure ConvertToRGB(image,type)
  StartDrawing(ImageOutput(image))
  
  For x=0 To ImageWidth(image)-1
    For y = 0 To ImageHeight(image)-1
      rgb=Point(x,y)
      Select type
        Case 1 ;Red
          Col=Red(rgb)
          Plot(x, y,RGB(Col,0,0))
        Case 2 ;Green
          Col=Green(rgb)
          Plot(x, y,RGB(0,Col,0))
        Case 3 ;Blue
          Col=Blue(rgb)
          Plot(x, y,RGB(0,0,Col))
      EndSelect
      
    Next
  Next
  
  StopDrawing()
EndProcedure

Procedure ReplaceColor(image,color,targetcolor)
  StartDrawing(ImageOutput(image))
  
  For x=0 To ImageWidth(image)-1
    For y = 0 To ImageHeight(image)-1
      rgb=Point(x,y)
      If rgb=color
        Plot(x,y,targetcolor)
      EndIf
      
    Next
  Next
  
  StopDrawing()
EndProcedure

Verfasst: 08.11.2007 17:00
von #NULL

Code: Alles auswählen

0 To ImageWidth(image)
..sollte noch ein -1 dran, geht sonst bei plot schief!

Verfasst: 08.11.2007 18:26
von Fluid Byte
Kannste vielleicht noch ne' Demo zusammschrauben? Bin zu faul jetzt.

Verfasst: 09.11.2007 12:08
von legion
@X0r

Gefällt mir ! :D
Kann ich gut gebrauchen, danke !

Lg. Legion

Re: Grafik-Zeug

Verfasst: 09.11.2007 12:18
von Kiffi
X0r hat geschrieben:Hier paar kleine Spielereien für einige brauchbare 2D Effekte:
alle Variablen, die nur innerhalb der Prozeduren verwendet werden,
sollten generell mit 'Protected' geschützt werden.

Verfasst: 09.11.2007 13:43
von NicTheQuick
Also bei mir ist das alles sau lahm. Der braucht mehrere Sekunden um so ein
Bild zu verändern.

Außerdem ist es wohl nicht sehr geschickt, bei jedem For-Durchlauf nochmal
'ImageWidth()' bzw. 'ImageHeight()' aufzurufen. Das sollte vorher in zwei
Variablen geschrieben werden, damit es schneller geht.

Getestet unter Linux. Bis auf #MB_ICONERROR komplett lauffähig.

Verfasst: 09.11.2007 15:24
von X0r
Also bei mir ist das alles sau lahm. Der braucht mehrere Sekunden um so ein
Bild zu verändern.
Plot ist ja auch sau lahm, wüsste jetzt nicht, wie man das mit der PB 2D Engine schneller hinbekommt.
Aber bei einer Grafikanwendung darf das doch auch mal ne Sekunde dauern, oder? :wink:

@Fluid Byte:
Hier findest du Beispiele zu allen Funktionen.

Verfasst: 09.11.2007 16:14
von #NULL
setz das mal über drawingbuffer() um. dann wirds chic :wink:

Verfasst: 09.11.2007 16:39
von Fluid Byte
#NULL hat geschrieben:setz das mal über drawingbuffer() um. dann wirds chic :wink:
Funktioniert leider nicht auf MacOS.