Alpha mischen ein rotes, blaues und grünes Bild, um ein Bild zu erzeugen, das auf einen RGB -Wert getönt ist?

StackOverflow https://stackoverflow.com/questions/2030471

Frage

Grundsätzlich habe ich einen Kontext, in dem ich ein Bild programmatisch färben kann, obwohl ich seinen Alpha -Wert ändern kann. Bei einigen Experimenten habe ich festgestellt, dass ich eine rote, blaue und grüne Version des Bildes mit spezifischen Alpha -Werten schichten kann, um eine Vielzahl von Farben zu erzeugen. Ich frage mich jedoch, ob es möglich ist, durch diese Methode eine echte RGB -Darstellung zu erreichen. Wenn ja, wie hoch ist die Formel zum Umwandeln eines RGB -Werts in verschiedene Alpha -Werte für die roten, blauen und grünen Schichten.

War es hilfreich?

Lösung

Die grundlegende "Gleichung" der Alpha -Kombination lautet:

alpha * (R1,G1,B1) + (1-alpha) * (R2,G2,B2)

Wenn Sie drei Schichten mit Alpha haben, kombinieren Sie tatsächlich 4 Schichten (der 4. ist schwarz). Die endgültige Farbe lautet also:

alpha1 * (R1,G1,B1) + (1-alpha1) * ( 
   alpha2 * (R2,G2,B2) + (1-alpha2) * (
      alpha3 * (R3,G3,B3) + (1-alpha2) * (0,0,0) ) )

Vorausgesetzt, Sie haben das gleiche Bild auf jeder Ebene und Layer1 ist der rote Kanal (G1 = B1 = 0) und Layer2 ist grün und Layer3 ist blau, was Sie erhalten:

(alpha1 * R, (1-alpha1)*alpha2 * G, (1-alpha1)*(1-alpha2)*alpha3 * B)

Für ein weißes Pixel können Sie jede mögliche Farbe machen. Für ein schwarzes Pixel kann man nichts anderes als schwarz tun. Für jedes andere Pixel sind Sie durch die Werte von R, G und B. eingeschränkt

Angenommen, Sie wollten (Rd, GD, Bd) in einem Pixel erreichen, in dem die aktuelle Farbe (r, g, b) dann entscheiden müssten, dann müssten Sie wählen:

alpha1 = Rd/R
alpha2 = Gd/(G*(1-alpha1))
alpha3 = Bd/(B*(1-alpha1)*(1-alpha2))

Das Problem ist, dass Alpha normalerweise nur zwischen 0 und 1 liegen kann. Wenn Sie also beispielsweise nichts tun können, können Sie nichts tun.

Sie können es besser machen, wenn Sie die Mischfunktion steuern können (z. B. in Photoshop).

Andere Tipps

Ich denke nicht, dass das möglich ist, wenn ich Sie richtig verstehe.

Wenn für ein bestimmtes Pixel der rote Wert Ihres Bildes beispielsweise 0,5 ist, können Sie dies mit einem Alpha im (typischen) Bereich [0,1] kombinieren, um einen beliebigen Wert bis hin zu 0,5 zu bilden, aber Sie können nicht können Gehen Sie oben, um z. B. 0,6 als Ausgangswert zu erhalten.

Wenn Sie 3 Ebenen erstellen möchten, die mit dem Originalbild zusammenfügen, ist dies durchaus möglich. Hier ist ein Link zu einem Python -Skript, das Funktionen in Paint Shop Pro für die harten Teile aufruft.

http://pixelnook.home.comcast.net/~pixelnook/splittorgb.htm

Wenn Sie mehr Details benötigen, hinterlassen Sie einen Kommentar und ich werde versuchen, ihn später auszufüllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top