SetGamma unter BlitzPlus
Übersicht

Die_ChaosmaschineBetreff: SetGamma unter BlitzPlus |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Die_Chaosmaschine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikipedia.org/wiki/Gammakorrektur
Nein, Wikipedia reicht da völlig ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist einfach nur eine Definierte Mathematische Funktion welche, so glaube ich zumindest, vorerst nichts mit der Hardware ansich zu tuen hat ![]() |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group