SchwarzWeiß / Kontrast / Helligkeit

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.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

SchwarzWeiß / Kontrast / Helligkeit

Beitrag von Tompazi »

Code: Alles auswählen

;B&W - Contrast - Brightness

Procedure Black_n_White(ImageID)
 StartDrawing(ImageOutput(ImageID))
 
 For y = 0 To ImageHeight(ImageID) -1
  For x = 0 To ImageWidth(ImageID) -1
  
   Color = Point(x,y)
   R = Red(Color) 
   G =  Green(Color)
   B = Blue(Color)
   Gray = (R+G+B)/3
  
   Plot(x,y,RGB(Gray,Gray,Gray))
  
  Next x
 Next y
 
 StopDrawing()
EndProcedure

Procedure Contrast(ImageID,ContrastChange) ;; ContrastChange = -255 to 255
 StartDrawing(ImageOutput(ImageID))
 
 For y = 0 To ImageHeight(ImageID) -1
  For x = 0 To ImageWidth(ImageID) -1
   
   Color = Point(x,y)
   R = Red(Color) 
   G =  Green(Color)
   B = Blue(Color)
   
   If R > G And R > B
    R + ContrastChange
    G - ContrastChange
    B - ContrastChange
   ElseIf G > R And G > B
    G + ContrastChange
    R - ContrastChange
    B - ContrastChange
   ElseIf B > R And  B > G
    B + ContrastChange
    R - ContrastChange
    G - ContrastChange
   EndIf
   
   If R > 255 : R = 255
   ElseIf R < 0 : R = 0 : EndIf
   If G > 255 : G = 255
   ElseIf G < 0 : G = 0 : EndIf
   If B > 255 : B = 255
   ElseIf B < 0 : B = 0 : EndIf
   
   Plot(x,y,RGB(R,G,B))
  
  Next x
 Next y
 
 StopDrawing()
EndProcedure

Procedure Brightness(ImageID,Change) ;; Change = -255 To 255
 StartDrawing(ImageOutput(ImageID))
 
 For y = 0 To ImageHeight(ImageID) -1
  For x = 0 To ImageWidth(ImageID) -1
  
   Color = Point(x,y)
   R = Red(Color) 
   G =  Green(Color)
   B = Blue(Color)
   
   R + Change
   G + Change
   B + Change
   
   If R > 255 : R = 255
   ElseIf R < 0 : R = 0 : EndIf
   If G > 255 : G = 255
   ElseIf G < 0 : G = 0 : EndIf
   If B > 255 : B = 255
   ElseIf B < 0 : B = 0 : EndIf
   Plot(x,y,RGB(R,G,B))
  
  Next x
 Next y
 
 StopDrawing()
EndProcedure

Image$ = OpenFileRequester("Please choose file to load","", "Bitmap (*.bmp)|*.bmp;", 0)
      
If Image$
 LoadImage(0,Image$)
 Black_n_White(0) ;Comment in or out
 ;Contrast(0,10) ;Comment in or out
 ;Brightness(0,-50) ;Comment in or out
Else
 End
EndIf

Saver$ =SaveFileRequester("Save your image",Image$, "Bitmap (*.bmp)|*.bmp;", 0)

If Saver$
 SaveImage(0,Saver$)
Else
 End
EndIf
//EDIT:
Sorry,
ich schreib grad an einem kleinem FotoEditor und das sind ein paar Prozeduren zum Schwarzweiß machen, Kontrast und Helligkeit ändern.
Bild wird geladen und abgespeichert ...

MfG Tompazi
Zuletzt geändert von Tompazi am 05.02.2009 13:54, insgesamt 2-mal geändert.
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SchwarzWeiß / Kontrast / Helligkeit

Beitrag von Kiffi »

// Edit: [hat sich erledigt]

Danke & Grüße ... Kiffi
Zuletzt geändert von Kiffi am 05.02.2009 15:36, insgesamt 1-mal geändert.
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Habe da auch schon n Include gebaut :
Include - Farbanpassungen (Helligkeit, Kontrast, Graustufen)

Vllt kannst du ja noch das eine oder andere benutzen.

Im übrigen würde ich dir raten das ganze lieber mit Sprites zu machen statt mit Image, und dann mit DrawingBuffer() zu arbeiten statt mit den Point() und Plot() da diese sehr langsam sind.
Gerade weil du ja ganze Bilder formatierst, wäre das ein großer vorteil
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

Danke, habs mir durchgeschaut und dank dir einen Fehler in meiner Kontrast Prozedur gefunden..

Code: Alles auswählen

Procedure Contrast(ImageID,ContrastChange) ;; ContrastChange = -100 to 100
 StartDrawing(ImageOutput(ImageID))
 
 For y = 0 To ImageHeight(ImageID) -1
  For x = 0 To ImageWidth(ImageID) -1
   
   Color = Point(x,y)
   R = Red(Color) 
   G =  Green(Color)
   B = Blue(Color)
   C.f = ContrastChange/100
    R = R + (R -128) * C
    G = G + (G -128)* C
    B = B + (B -128) * C
    
   If R > 255 : R = 255
   ElseIf R < 0 : R = 0 : EndIf
   If G > 255 : G = 255
   ElseIf G < 0 : G = 0 : EndIf
   If B > 255 : B = 255
   ElseIf B < 0 : B = 0 : EndIf
   
   Plot(x,y,RGB(R,G,B))
  
  Next x
 Next y
 
 StopDrawing()
EndProcedure
MfG Tompazi
Bild
Antworten