Gamma, Helligkeit und Kontrastkorrektur
Übersicht BlitzBasic Codearchiv
ThoemBetreff: Gamma, Helligkeit und Kontrastkorrektur |
Di, Dez 26, 2006 18:19 Antworten mit Zitat |
|
---|---|---|
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... |
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group