Alpha blending un colore rosso, blu e verde per produrre un'immagine colorata su qualsiasi valore rgb?

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

Domanda

In sostanza, ho un contesto in cui non posso programatically colorare un'immagine, anche se posso cambiare il suo valore alfa. Con un po 'di sperimentazione, ho trovato che posso strato una versione rosso, blu e verde dell'immagine, con valori alfa specifici, per produrre una vasta gamma di colori. Tuttavia, mi chiedo se è possibile ottenere una rappresentazione veritiera RGB attraverso questo metodo? In caso affermativo, qual è la formula per convertire un valore RGB in diversi valori alfa per gli strati rossi, blu e verdi.

È stato utile?

Soluzione

Il "equazione" base di combinazione alfa è:

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

Quando si hanno tre strati con alpha in realtà si sta combinando 4 strati (il 4 ° uno è nero) in modo che il colore finale è:

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

Se si dispone la stessa immagine su ogni livello e layer1 è il canale rosso (G1 = B1 = 0) e layer2 è verde e layer3 è blu si ottiene:

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

Per un pixel bianco si può fare tutto il colore possibile. Per un pixel nero non si può fare nulla, ma nero. Per qualsiasi altra pixel, si sono limitati dai valori di R, G e B.

Di 'si voleva ottenere (Rd, Gd, Bd) ad un pixel in cui il colore corrente è (R, G, B), allora si dovrebbe scegliere:

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

Il problema è che l'alfa in genere può essere solo tra 0 e 1. Quindi, per esempio, se Rd> R non c'è niente che puoi fare.

Si può fare meglio se si può controllare la funzione di miscelazione (ad esempio, in Photoshop).

Altri suggerimenti

Non credo che sia possibile, se ho capito bene.

Se, per un certo pixel, il valore rosso della vostra immagine è, diciamo, 0,5, è possibile combinare che con un alfa nel (tipico) nell'intervallo [0,1] per formare qualsiasi valore fino al 0.5, ma si non si può andare oltre, per ottenere ad esempio 0,6 o così come il valore di uscita.

Se stai cercando di creare 3 strati che miscelati insieme aggiungono fino a l'immagine originale, è del tutto possibile. Ecco un link ad uno script Python che chiama le funzioni in Paint Shop Pro per fare le parti dure.

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

Se avete bisogno di più dettagli di quello, lasciare un commento e cercherò di riempirlo in un secondo momento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top