Farbe herausbekommen am Farbspektrum?
-
Hi...
1. Habe ich versucht das Ding zu verstehen und das habe ich auch geschafft.
2. Das größte Problem für mich ist aber nun, dass das Spektrum auch mit Transparenz arbeitet, um die Helligkeit auch einstellen zu können.Wenn ich beispielsweise weiß, dass der Cursor weiter unten links steht, kann ich ja problemlos raus kriegen, dass dort rot ist. Das schwarze wird ja nur mit einer Transparenz darüber gemalt. Wie kriege ich nun raus, was Rot
(255, 0, 0, 255)und Schwarz mit einer Transparenz von 150(0, 0, 0, 150)für einen Farbwert ergeben?Vielleicht habe ich das etwas komisch beschrieben oben. Aber ich meinte damit eher das Zusammenmischen der Farben...
Gruß
-
Anhand der x,y Position deiner Maus würde ich mal sagen, kannst du dann die Farbe errechnen lassen. Sollte eigentlich gar nicht so schwer sein, wie mein Vorgänger das schon gesagt hat, aber halt etwas schorf... Man musses versuchen zu Verstehen. Und da du wahrscheinlich jmd. eine Farbe auswählen lassen Willst, einfach bisschen was in eine neue Funktion basteln o.ä. und dann da die X, Y der Maus übergeben und ausrechnen, fertig ist der lack, ganz simpel.
-
Ja, das ist mir schon klar

Ich versuche noch mal das genauer zu erklären:Es scheitert eigentlich gar nicht am Code, sondern eher daran, zu verstehen, wie die Farbe Rot (255, 0, 0, 255) mit Schwarz (0, 0, 0, 150) oder mit Weiß (255, 255, 255, 100) aussehen könnte (also welcher Farbwert letztendlich rauskommt). Vielleicht ist das ganze auch einfach. Aber meine letzte Kunststunde liegt schon etwas länger zurück...
Gruß
-
Gehen wir mal davon aus, dass Schwarz(0,0,0,255/2) ist und das auf ein Rot(255,0,0,255) angewandt wird dann folgt daraus ein Rot,welches um die Hälfte dunkler ist, also da dann zu einem entsprechenden anteil blau und gelb/grün reingemischt sind... Irgendwie so... würde ich mir das zumindest vorstellen...
Am besten spielt man dazu erstmal ein bisschen mit Hexfarbwerten rum und schaut die sich in einem entsprechenden Viewer an um dann abschätzen zu können zu welchem anteil bei welcher Verdunklung andere Farben mit rein gemacht werden müssen oder auch nicht.... So in etwa? Bin in diesem Thema relativ jung unterwegs, daher kann das auch komplett falsch sein... Aber es sind meine Übelegungen dazu...EDIT: Wobei ja dann weniger Rotwert auch auf dunkler schließen lässt und man somit nur den rot wert um die hälfte verringern müsste... also um den Transparenz wert, den Schwarz hat verringern und bei Weiß muss man dann aber glaub ich andere Farben dazumischen damits heller wird... wie z.B. HellRed(255,100,100,255) oder so...
-
Hi.
Stimmt, dass habe ich so noch gar nicht gesehen.Hier ist meine aktuelle Lösung um erstmal nur die Farbwerte herauszubekommen. Helligkeit wird dabei noch nicht beachtet:
if (this->m_iX < 43) { this->m_clrTemp.set(255, this->m_iX * 6, 0, 255); } else if (this->m_iX < 86) { this->m_clrTemp.set(255 - this->m_iX * 6, 255, 0, 255); } else if (this->m_iX < 129) { this->m_clrTemp.set(0, 255, this->m_iX * 6, 255); } else if (this->m_iX < 172) { this->m_clrTemp.set(0, 255 - this->m_iX * 6, 255, 255); } else if (this->m_iX < 215) { this->m_clrTemp.set(this->m_iX * 6, 0, 255, 255); } else { this->m_clrTemp.set(255, 0, 255 - this->m_iX * 6, 255); } // this->m_iX ist die aktuelle X-Position des CursorsSieht mir alles etwas murksig aus, vielleicht geht das ja noch einfacher. Aber was anderes kriege ich gerade nicht hin

Ich probier mal weiter herum.
Gruß
-
Och würde sagen, mit den Farbwerten ist das so:
Alte Farbe r, g, b (im Beispiel rot, also 255, 0, 0)
Überdeckungsfarbe: r2, g2, b2, a2 (im Beispiel halbtransparentes schwarz, also 0, 0, 0 , 127)Neue Farbe: r3, g3, b3
r3 = (255 - a2) / 255 * r + a2 / 255 * r2Analog für g3, b3.
Im Beispiel wäre das also:
r3 = 0.5 * 255 + 0.5 * 0 = 127 g3 = 0.5 * 0 + 0.5 * 0 = 0 b3 = 0.5 * 0 + 0.5 * 0 = 0es kommt also ein halb so helles rot raus.
-
Und wie sieht das dann bei helleren Farben aus, also heller als rot(255,0,0,255)?
Kommen dann andere Farbspektren dazu um halt additiv Richtung weiß zu kommen oder spielt man da dann mit der Transparenz?
-
na, wenn man rot + weiß (50% transparent) rechnet, kommt ein helleres rot raus:
[code]
r3 = 0.5 * 255 + 0.5 * 255 = 255
g3 = 0.5 * 0 + 0.5 * 255 = 127
b3 = 0.5 * 0 + 0.5 * 255 = 127
[\code]gibt ein schönes schweinchenrosa.
-
Hi.
Danke!
Habe mal versuchst das umzusetzen. Entweder ich mache was falsch oder die Berechnung stimmt leider doch nicht.Hier ist der Code:
this->m_clrTemp.set( /*rot*/(255 - this->m_iY) / 255 * this->m_clrTemp.r() + this->m_iY / 255 * 255, /*gruen*/(255 - this->m_iY) / 255 * this->m_clrTemp.g() + this->m_iY / 255 * 255, /*blau*/(255 - this->m_iY) / 255 * this->m_clrTemp.b() + this->m_iY / 255 * 255, /*alpha*/255);Das ist jetzt für oben (also das weiße). Die resultierende Farbe ist aber leider immer Schwarz.
Gruß
-
Du rechnest ja auch immer mit Integerwerten.
Was ergibt dann z.B. "this->m_iY / 255" ? -)Statt jedoch auf Float bzw. Double zu wechseln, solltest du einfach die Formel anpassen:
r3 = ((255 - a2) * r + a2 * r2) / 255
-
Hi.
Danke - das sieht schon sehr viel besser aus. Allerdings ist das Problem, dass er ganz oben im Spektrum Rot anzeigt, und in der Mitte weiß (müsste anders herum). Ich habe bereits alle möglichen Kombinationen mit + und - 255 probiert, aber dann passt das alles nicht mehr.Und mit schwarz geht es leider auch gar nicht

// m_iY < 256 - weiß this->m_clrTemp.SetColor( ((255 - this->m_iY) * this->m_clrTemp.r() + (this->m_iY) * 255) / 255, ((255 - this->m_iY) * this->m_clrTemp.g() + (this->m_iY) * 255) / 255, ((255 - this->m_iY) * this->m_clrTemp.b() + (this->m_iY) * 255) / 255, 255); // m_iY > 256 - schwarz this->m_clrTemp.SetColor( ((255 - this->m_iY) * this->m_clrTemp.r() + this->m_iY * 0) / 255, ((255 - this->m_iY) * this->m_clrTemp.g() + this->m_iY * 0) / 255, ((255 - this->m_iY) * this->m_clrTemp.b() + this->m_iY * 0) / 255, 255);Gruß und Danke.