Alpha misturando uma imagem vermelha, azul e verde para produzir uma imagem tingida a qualquer valor RGB?

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

Pergunta

Basicamente, tenho um contexto em que não consigo tingir programaticamente uma imagem, embora eu possa alterar seu valor alfa. Com alguma experimentação, descobri que posso colocar uma versão vermelha, azul e verde da imagem, com valores alfa específicos, para produzir uma ampla gama de cores. No entanto, estou me perguntando se é possível obter uma verdadeira representação RGB através deste método? Nesse caso, qual é a fórmula para converter um valor RGB em diferentes valores alfa para as camadas vermelhas, azuis e verdes.

Foi útil?

Solução

A "equação" básica da combinação alfa é:

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

Quando você tem três camadas com alfa, você está realmente combinando 4 camadas (a 4ª é preta), então a cor final é:

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

Desde que você tenha a mesma imagem em cada camada e a camada1 é o canal vermelho (g1 = b1 = 0) e a camada2 é verde e a camada3 é azul, você obtém:

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

Para um pixel branco, você pode fazer qualquer cor possível. Para um pixel preto, você não pode fazer nada além de preto. Para qualquer outro pixel, você é restrito pelos valores de R, G e B.

Digamos que você queria alcançar (RD, GD, BD) em um pixel onde a cor atual é (r, g, b), então você teria que escolher:

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

O problema é que o alfa normalmente pode estar entre 0 e 1. Portanto, por exemplo, se rd> r não houver nada que você possa fazer.

Você pode fazer melhor se puder controlar a função de mistura (por exemplo, no Photoshop).

Outras dicas

Eu não acho que seja possível, se eu entender você corretamente.

Se, por um determinado pixel, o valor vermelho da sua imagem é, digamos, 0,5, você pode combiná -lo com um alfa na faixa (típica) [0,1] para formar qualquer valor até e incluindo 0,5, mas você não pode Vá acima, para obter, por exemplo, 0,6 ou mais como o valor de saída.

Se você deseja criar três camadas que se misturam, somem a imagem original, é bem possível. Aqui está um link para um script Python que chama funções no Paint Shop Pro para fazer as partes difíceis.

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

Se você precisar de mais detalhes do que isso, deixe um comentário e tentarei preenchê -lo mais tarde.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top