SetGamma unter BlitzPlus

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Die_Chaosmaschine

Betreff: SetGamma unter BlitzPlus

BeitragDi, Jun 02, 2015 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich bin gerade frisch registriert, weil ich Hilfe benötige. Trotz aller autodidaktischer Exzesse und gewissenhaften Lesens der Foreneinträge zum o. g. Befehl verstehe ich dessen Logik nach wie vor nicht in Gänze.

Ich weiß inzwischen, wie er funktioniert und welche Werte ungefähr welchen Effekt erzielen. Jedoch eine kleine Abweichung von der Systematik des Befehls, die sich mir noch nicht eröffnete und es gibt ein Farbgemetzel (alles wird weiß, alles wird schwarz, Farbverschiebungen). Zwei Beispiele, die ich intensiv untersuchte, haben mich große Schritte voran gebracht. Ich werde sie am Ende auch noch sicherheitshalber posten.

Nun zu meinen Anliegen:
1. Bitte erkläre mir einmal jemand die Abhängigkeiten von den Farbindizes und (deren) Gammawerten, denn trotz tagelangen lustigen Zahlentausches erkenne ich nur ein halbwegs brauchbares logisches Muster. -hm oder ich bin zu dumm dafür!
2. Warum muss ein Schrittzähler, der die Gammawerte verändert stets zwischen null und eins alternieren (je kleiner die Kommazahl, desto langsamer geht das Schwarz-Weiß-Faden). Egal ob ich es plump mit einem einfachen Schrittzähler mache oder mittels Cosinusfunktion.
3. Im umgedrehter Sichtweise; warum funktioniert es eben nicht die Gammawerte exakt wie die Farbindexwerte zu verändern?

Ich bin der geistigen Verzweiflung nah, weil ich es endlich vollständig kapieren will und hoffe, mein Anliegen ist klar und nicht zu umständlich formuliert. Ich wünsche mir nur endlich eine abschließende Erläuterung, wie ganz genau der Befehl SetGamma funktioniert. Und nun zu den 2 Kurzbeispielen, die meiner Meinung nach ein sehr schönes Fade-In-Fade-Out eines Bildes erzeugen:

1. Beispiel:
=======

Code: [AUSKLAPPEN]

Graphics 800,600,8,1
Setbuffer Backbuffer ()

Bild = LoadImage ("Beispielbild.bmp")
DrawImage Bild,0,0
Flip 0

i# = 0
is# = 0.01

While Not KeyHit (1)
 For j = 0 to 255
  SetGamma j,j,j,j*i,j*i,j*i
 Next
 UpdateGamma False

 i = i + is
 If i < 0 or i > 1
  is = - is
  i = i + is ; --->meine Bemerkung: Ist das wirklich notwendig? Gibts doch 3 Zeilen darüber schon, ich weiß es nicht.
 EndIf

Wend

End



2. Beispiel:
=======

Code: [AUSKLAPPEN]


; die akademische Variante
Graphics 800,600,8,1
Setbuffer Backbuffer ()

Bild = LoadImage ("Beispielbild.bmp")
DrawImage Bild,0,0
Flip 0

While Not  KeyDown (1)
 timer# = (timer# + 0.2) Mod 360.0 ; ---> Warum 360 punkt null? Es beeinflusst das Ergebnis nicht, würde ich nur
                                                                360 schreiben; ich weiß es nicht.
 aa# = Abs (Cos(timer#))
 ZetGamma (aa#)
 UpdateGamma
Wend

Function ZetGamma (ax#)
 For a = 0 to 255
  b = a*ax
  SetGamma a,a,a,b,b,b
 Next
End Function

end




So liebe Gemeinde. Wer erleuchtet mich bzw. überwindet den Widerstand meiner scheinbar "langen Leitung"?
  • Zuletzt bearbeitet von Die_Chaosmaschine am Di, Jun 02, 2015 20:01, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDi, Jun 02, 2015 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Willkommen.

Bitte benutzte Code- oder Syntaxboxen und poste möglichst lauffähigen Code - dann sind auch mehr Leute bereit, ein paar Minuten zu investieren, um sich das Problem an zu sehen.

SetGamma verschiebt die Farben um einen Offset. Macht man das einheitlich über den ganzen Farbraum, wird die Anzeige Dunkler oder heller.

Wenn deine Berechnungen unerwartete Ergebnisse bringen, könntest du die mitloggen und mit einem Tabellenprogramm deiner Wahl plotten. Wenn du deine eigenen Berechnungen nicht nachvollziehen kannst... nun, da kann ich dir auch nicht sagen, was Richtig oder Falsch sein soll.



~VERSCHOBEN~
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Die_Chaosmaschine

BeitragMi, Jun 03, 2015 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Jawohl verstanden - Codebox eingefügt. Ich entschuldige mich für meinen Anfänger-Formfehler.

Für mein und euer Verständnis. Ich gehe davon, dass jeder der sich auf meinen Post meldet, es auch wirklich will, die Zeit und die Lust dazu hat und entscheidet, die Antwort entsprechend ausführlich und gut zu schreiben. Denn ansonsten sollte er/sie es lassen, damit sich am Ende niemand ärgert.

Denn weiter geholfen hat mir deine Antwort (Xeres) leider nicht:
- Mir fehlt die konstruktive nachvollziehbare Erklärung, um die ich bat. Vielleicht ist es dir vollständig klar - mir nach wie vor nicht

- Dein Link zu 'SetGamma' ist mir bekannt, die Erklärung nicht abschließend und das Beispielprogramm doch recht unglücklich. Es farbverzerrt genauso die abgebildeten bunten Flächen wie ich zuvor beschrieb, sobald eine Disharmonie von Farbindex- und Gammawerten entsteht. Lediglich die "Rotfunktion" funktioniert (warum auch immer). Bitte berichtigt mich, wenn mein Rechner mit dem Programm vielleicht etwas anderes macht, als es konzipiert war. Aufhellen oder abdunkeln tut es jedenfalls nicht.

- Werte habe ich zu Genüge geloggt und geplottet; deshalb weiß ich ja, was Zahlen technisch läuft. Meine Berechnungen kann ich nachvollziehen. Ich erkenne wie gesagt nicht die Logik, mit der der Befehl arbeitet, oder nennen wir es Muster oder wie auch immer...

Also noch einmal meine Bitte: Genau durchlesen, worum es mir geht, Zeit und Muse haben für eine didaktische Antwort. Vielen Dank.

Cykid

BeitragFr, Jun 12, 2015 8:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktion macht genau das, was sie soll.
Die unnatürliche Farbverzerrung liegt daran, das die "Gammafunktion" in der Korrektur keiner liniaren Reglung folgt.

Die Gammakorrektur überführt eine Eingangsgröße Iin gemäß einer Abbildungsvorschrift in eine Ausgangsgröße Iout :

I_out = I_in^Gamma

Dabei gilt:

0 <= I_in <= 1


und

0<=I_out<=1

Man unterscheidet, je nach größe des Gamma wertes in 3 Fälle:

Y ist hier als Gamma definiert.

Y = 1: I_out = I_in ; Bildet eine lineare Abbildung.
Y < 1: Bildet eine Konkave Abbildung.
Y > 1: Bildet eine kovexe Abbildung.


Konnte ich dir damit helfen?
 

Die_Chaosmaschine

BeitragSa, Jun 13, 2015 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Cykid,

deine Antwort war gut, herzlichen Dank. Mit diesem Ansatz kann ich weiter forschen und den Befehl darauf hin analysieren. Warum gibt es diesen Hinweis in keinem der Befehlserklärungen(?). Selbst mein Lehrbuch blieb mir das schuldig.

Würde ich jetzt auf das "Warum" linear/konvex/konkav bestehen, befürchte ich, dass mir eine Antwort zu sehr in die Tiefen von Direct X oder Hardwarebeschaffenheit gehen würde?

BladeRunner

Moderator

BeitragSa, Jun 13, 2015 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
http://de.wikipedia.org/wiki/Gammakorrektur
Nein, Wikipedia reicht da völlig Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Cykid

BeitragSa, Jun 13, 2015 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist einfach nur eine Definierte Mathematische Funktion welche, so glaube ich zumindest, vorerst nichts mit der Hardware ansich zu tuen hat Smile

DAK

BeitragSo, Jun 14, 2015 9:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, die Gamma-Korrektur ist eine ziemliche Standard-Funktion, die wird selbst in den meisten Bildschirmen direkt eingebaut angeboten.

Solche Sachen werden nicht in der Hilfe abgehandelt (wie z.B. auch nicht was genau die Sinus-Funktion macht), da das den Ramen der Hilfe sprengen würde. Sowas am Besten einfach auf Wikipedia nachschauen, dort findet man vor allem auch so detaillierte Antworten (vor allem auf der englischen Wikipedia).
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group