Gamma, Helligkeit und Kontrastkorrektur

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Thoem

Betreff: Gamma, Helligkeit und Kontrastkorrektur

BeitragDi, Dez 26, 2006 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Tach...

Neulich hatte ich mein aktuelles Projekt mal zu Testzwecken auf einem Uralt-Rechner laufen lassen. Allerdings musste ich feststellen das der Monitor anscheinend genauso alt war wie der Rechner selbst. Das Bild war unglaublich finster und von meiner "schönen 3D-Umgebung" fast nichts zu sehen. "Kein Thema", dachte ich mir "baust du eben noch einen Gammaabgleich ein". Aber wie macht man sowas? Also Internet an und in den Foren stöbern... Denkste... Es war absolut nichts zu finden was das Problem korrekt löst. Damit ihr mich nicht falsch versteht, der Umgang mit dem SetGamma Befehl stellt nicht das Problem dar, vielmehr die Helligkeitskurve vernünftig abzugleichen. Die vorhandenen Beispiele korrigieren entweder die Helligkeit oder den Kontrast. Aber Gamma... Fehlanzeige. Also hab ich mich hingesetzt, ein paar Bücher gewälzt und Voila, die Gammakorrekturfunktion:

Ach so, die Funktion beinhaltet den Gammawert, die Helligkeit und den Kontrast.

Code: [AUSKLAPPEN]

;
; Gammakorrektur  (Thoem (2006))
;

;
; demonstration funktioniert nur im Vollbildmodus
Graphics 800,600,32,1

;
; farbbalkenbild erzeugen
img=CreateImage(768,135)
SetBuffer ImageBuffer(img)
For x=0 To 765
   c=x/3
   Color c,c,c : Rect x,0,3,30,True
   Color c,0,0 : Rect x,35,3,30,True
   Color 0,c,0 : Rect x,70,3,30,True
   Color 0,0,c : Rect x,105,3,30,True
Next
;
SetBuffer BackBuffer()
;
; startwerte fpr Gamma, KOntrast und HElligkeit festlegen
g#=1
ko#=1
he=0
;
;
Repeat
   ;   
   ; bild hoch/runter -> gammawert ändern
   If KeyDown(201) Then g=g+0.1
   If KeyDown(209) Then g=g-0.1
   ;
   ; pos1/ende -> kontrast ändern
   If KeyDown(199) Then ko=ko+0.01
   If KeyDown(207) Then ko=ko-0.01
   ;
   ; einf/entf -> helligkeit ändern
   If KeyDown(210) Then he=he+1
   If KeyDown(211) Then he=he-1
   ;
   ; numenter -> reset
   If KeyHit(156) Then g=1.0 : ko=1.0 : he=0
   ;
   ; werte begrenzen
   If g<0.1 Then g=0.1
   If ko<0.1 Then ko=0.1
   ;
   ; textausgabe
   Color 0,0,0
   Rect 0,440,800,80,True
   Color 255,255,255
   Text 0,440,"(Einf)/(Entf) Helligkeit +/-  :"+he
   Text 0,460,"(Pos1)/(Ende) Kontrast +/-    :"+ko
   Text 0,480,"(Bild /\)/(Bild \/) Gamma +/- :"+g
   Text 0,500,"(NumEnter): Reset"
   ;
   ; gammakurve zeichnen
   Color 0,0,0
   Rect 272,172,256,256,True
   Color 255,255,0
   y#=0
   For x=0 To 255
      fx#=Float(x)
      y#=((((fx/255.0)^(1/g))*255)*ko)+he
      If y>255 Then y=255
      If y<0 Then y=0
      Plot 272+x,427-y
   Next
   Color 255,0,0
   Rect 272,172,256,256,False
   ;
   ; farbbalkenbild zeichnen   
   DrawImage img,17,0
   ;
   ; gammakorrektur vornehmen
   set_gamma(g,ko,he)
   ;   
   Flip
   ;
Until KeyHit(1)

End

;
; Gammakorrektur vornehmen
Function set_gamma(gamma#,kontrast#=1.0,helligkeit%=0.0,kalibrierung=False)
   For i=0 To 255
      fx#=Float(i)
      y#=((((fx/255.0)^(1/gamma))*255)*kontrast)+helligkeit
      If y>255 Then y=255
      If y<0 Then y=0
      SetGamma i,i,i,y,y,y
   Next
   UpdateGamma kalibrierung
End Function
Thoem...

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group