Grafik-Zeug

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Grafik-Zeug

Beitrag 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
Zuletzt geändert von X0r am 08.02.2009 20:27, insgesamt 1-mal geändert.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

0 To ImageWidth(image)
..sollte noch ein -1 dran, geht sonst bei plot schief!
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Kannste vielleicht noch ne' Demo zusammschrauben? Bin zu faul jetzt.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

@X0r

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

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Grafik-Zeug

Beitrag 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.
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

setz das mal über drawingbuffer() um. dann wirds chic :wink:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

#NULL hat geschrieben:setz das mal über drawingbuffer() um. dann wirds chic :wink:
Funktioniert leider nicht auf MacOS.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten