Discussão do artigo "Estudando a Classe CCanvas. Como Desenhar Objetos Transparentes" - página 6
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Isso, Peter, é muito fácil.
Aqui está uma tarefa para você dominar e consolidar a essência da pergunta:
- como misturar duas cores ARGB(a1,r1,g1,b1) e ARGB(a2,r2,g2,b2) em uma camada, cada uma com sua própria transparência a1 e a2?
Sem essa mistura, é impossível sobrepor corretamente objetos com suavização de serrilhado uns sobre os outros.
Em uma rápida olhada: Na cor da camada inicial, sobrepomos a primeira cor ARGB (a1,r1,g1,b1) usando o método descrito no artigo. Em seguida, em cima da primeira cor, aplicamos a segunda, fazendo cálculos ARGB de acordo com a mesma fórmula. Só que, desta vez, a cor inferior será a primeira, que colocamos sobre a cor da camada original.
Posso estar errado, Nikolai, mas por que isso não funcionaria?
ZY: Ainda não fiz experimentos, mas a primeira opção pode não funcionar porque a transparência final das duas camadas superiores é calculada incorretamente. Nesse caso, você precisa misturar a camada do meio com a camada superior e, depois de obter a cor comum delas, sobrepô-la à camada original.
Em uma rápida olhada: Na cor da camada inicial, sobrepomos o primeiro ARGB (a1,r1,g1,b1) usando o método descrito no artigo. Em seguida, sobre a primeira cor, aplicamos a segunda, fazendo cálculos ARGB de acordo com a mesma fórmula. Só que, desta vez, a cor inferior será a primeira, que colocamos sobre a cor da camada inicial.
Talvez eu esteja errado, Nikolai, mas por que isso não funcionaria?
ZY: Ainda não experimentei, mas a primeira opção pode não funcionar porque a transparência final das duas camadas superiores é calculada incorretamente. Nesse caso, você precisa misturar a camada do meio com a camada superior e, depois de obter a cor comum delas, sobrepô-la à camada original.
Na verdade, é um desafio, e não um desafio fácil.
Como? Você mesmo já fez experiências com isso? Provavelmente a cor superior como um filtro a ser usado, calcule cada componente (rgb) da camada inferior em proporção ao nível do componente correspondente da camada superior e à transparência (é determinado quanto do que passará da camada inferior para a superior). Em seguida, recalcule os níveis dos componentes da camada superior de acordo com a opacidade (é determinado quanto permanece da camada superior). No final, calcule a média de cada componente das camadas inferior e superior (não a inferior e a superior originais, mas as recalculadas, conforme escrito). Não tentei fazer isso.
Bem, ou simplesmente some os componentes em proporção à transparência.
Terei que fazer experiências... tarefa interessante.
Como? Você mesmo já fez experiências com isso?
Uffff... Tudo acabou sendo muito mais simples, não há necessidade de filtrar antes de empilhar. Os componentes são simplesmente adicionados em proporção à transparência e à opacidade:
Alpha: 255 - a camada superior é opaca, 0 - totalmente transparente.
lr, lg, lb - componentes da camada inferior.
ur, ug, ub - componentes da camada superior.
Aqui no terminal, fundo preto, quadrado vermelho opaco, azul com 50% de transparência e, em seguida, amarelo com 50% de transparência.
Aqui está a mesma coisa no photoshop:
Uffff... Tudo acabou sendo muito mais simples, não há necessidade de filtrar antes de empilhar. Os componentes são simplesmente adicionados em proporção à transparência e à opacidade:
Alpha: 255 - a camada superior é opaca, 0 - totalmente transparente.
lr, lg, lb - componentes da camada inferior.
ur, ug, ub - componentes da camada superior.
Vou acessar meu computador, tentarei misturar duas imagens transparentes usando essa fórmula e verei o que acontece. :))
Como você mistura duas imagens transparentes? A primeira é sobreposta ao plano de fundo e, em seguida, a segunda é sobreposta ao resultado.
Em geral, você também pode dobrar duas imagens transparentes de alguma forma e, em seguida, sobrepô-las ao plano de fundo, mas agora não se trata disso.
***
O que seria particularmente interessante é aprender todos os métodos de sobreposição de camadas como no Photoshop.
Uffff... Tudo acabou sendo muito mais simples, não há necessidade de filtrar antes de empilhar. Os componentes são simplesmente adicionados em proporção à transparência e à opacidade:
Alpha: 255 - a camada superior é opaca, 0 - totalmente transparente.
lr, lg, lb - componentes da camada inferior.
ur, ug, ub - componentes da camada superior.
Aqui no terminal, fundo preto, quadrado vermelho opaco, azul com 50% de transparência e amarelo com 50% de transparência.
Aqui está a mesma coisa no Photoshop:
não é isso ...
A questão é que existe o Alpha1 e o Alpha2.
Portanto, você precisa calcular não apenas as cores de mistura da nova formação, mas também a transparência da nova formação.
Basicamente, você repetiu a fórmula do autor do artigo, misturando a cor transparente com o plano de fundo:
result=backgraund*(1-alpha)+foregrounde assim o fez:
result=backgraund*(1-alpha)+foreground*alphaSua variante está correta, mas o autor do artigo cometeu um erro em uma fórmula simples, e é engraçado que Peter o agradeça por essa fórmula :))))
Afinal, você pode ver a olho nu que o estouro de uchar ocorre facilmente na fórmula do autor. É estranho que ninguém tenha visto esse erro grosseiro por 4 anos.
É aqui que o algoritmo de mistura de outras cores transparentes é aplicado: