Drei Farben mischen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Drei Farben mischen

Beitrag von Benubi »

Hallo!

Ein Problem, auf das ich gestoßen bin, und auf das ich aufgrund meiner geistigen Mittelmäßigkeit noch keine Antwort selbst gefunden habe, ist Folgendes:

Ich würde gerne 3 Farben mit einander mischen. Die Prozedure-Deklaration sollte so aussehen, aber ich finde ja nicht die Antwort für den Inhalt dieser Prozedur, vielleicht weis ja jemand was?

Code: Alles auswählen

 Declare.i Mix3Colors(C1.l, A1.a, C2.l, A2.a, C3.l, A3.a)
Der jeweilige Wert von A1-A3 - also der Stärke-Faktor oder wie man das nennt - liegt bei 0-255. Es können auch alle 3 Farben auf 255 stehen - dann würden alle zu 100% mit einander gemischt werden, sozusagen... Wenn alle Farben mit Ax auf 0 stehen, soll auch eine 0 als Ergebnis rauskommen - das mische ich dann gerne mit einer Hintergrund-Textur/Pixel als Endergebnis vom neuen Skin also einfach wieder 2 Farben mischen, das Ergebnis dieser Mix3Colors() Prozedur und ein Hintergrund-Pixel.

Die Idee und das Problem ist bei mir entstanden, als ich Texturen farblich "skinnen" wollte, und hierfür mehrere Farben einsetzen wollte... Also Vordergrund/Hintergrund/Dekor -Farben oder sowas.

Ist sowas überhaupt möglich? Das muß doch möglich sein, oder habe ich einen Logik-Fehler in mein Wunschproblem eingebaut?

Ich habe den Instinkt, daß es irgendwie ganz einfach sein muß aber ich komme einfach nicht dahinter; ich war auch schon immer "mäßig begabt" in Mathe :/


Grüße,

Benubi
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Drei Farben mischen

Beitrag von GPI »

Meinst du so?

Code: Alles auswählen

Procedure.i Mix3Color(c1.i,a1.i,c2.i,a2.i,c3.i,a3.i)
  Protected ages=a1+a2+a3
  Protected red,green,blue
  If ages>0
    red=Red(c1)*a1+Red(c2)*a2+Red(c3)*a3
    red/ages
    green=Green(c1)*a1+Green(c2)*a2+Green(c3)*a3
    green/ages
    blue=Blue(c1)*a1+Blue(c2)*a2+Blue(c3)*a3
    blue/ages
    ProcedureReturn RGB(red,green,blue)
  EndIf
  ProcedureReturn 0
EndProcedure
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benubi
Beiträge: 186
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: Drei Farben mischen

Beitrag von Benubi »

Hallo GPI,

Danke für Deine Antwort! Ich habe es in mein Snippet bzw. Include eingebaut und muß jetzt eine Datei generieren mit GIMP bevor ich das testen kann. Außerdem kämpfe ich mit unvorhergesehenen Problemen im Main-Sourcecode dieses langjährigen Experimentes... Da bin ich mal gespannt ob das wirklich so einfach geht wie ich es mir wünsche ^^

Bis demnächst...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Drei Farben mischen

Beitrag von NicTheQuick »

Die Aufgabe ist nicht ganz wohl definiert. Gibt man für a1 = a2 = a3 = 1 an, dann passiert in GPIs Variante das gleiche wie wenn a1 = a2 = a3 = 255 ist. Wenn aber a1 = a2 = a3 = 0, dann kommt direkt 0 raus. Hier müsste man sich noch überlegen, wie man den Übergang besser macht.
Bild
Antworten