Treinamento
Módulo
Develop products with accessible color and contrast - Training
Learn the importance of color and contrast in digital design for accessibility.
Não há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Em computação gráfica, existem duas maneiras diferentes de representar a opacidade de um valor de cor. O Win2D usa os dois métodos. Este artigo explica a diferença e qual é usado onde.
Ao usar alfa reto, também conhecido como linear:
Neste mundo, RGB e alfa são independentes. Você pode alterar um sem afetar o outro. Para fazer um objeto desaparecer, você reduziria gradualmente seu valor alfa, deixando o RGB inalterado.
Para executar uma mesclagem de origem entre duas cores que usam o formato alfa direto:
result = (source.RGB * source.A) + (dest.RGB * (1 - source.A))
Ao usar alfa pré-multiplicado:
Neste mundo, RGB e alfa estão ligados. Para tornar um objeto transparente, você deve reduzir seu RGB (para contribuir com menos cor) e também seu alfa (para obscurecer menos o que está por trás dele). Objetos totalmente transparentes não têm mais nenhuma cor, portanto, há apenas um valor que representa 100% de transparência: RGB e alfa todos zero.
Para executar uma mesclagem de origem entre duas cores que usam o formato alfa pré-multiplicado:
result = source.RGB + (dest.RGB * (1 - source.A))
O alfa pré-multiplicado é usado na renderização de gráficos porque fornece melhores resultados do que o alfa direto ao filtrar imagens ou compor diferentes camadas. Para obter mais informações, consulte estas postagens do blog:
O Win2D usa alfa direto em sua superfície de API, mas alfa pré-multiplicado para operações de renderização internas.
Windows.UI.Color
Os valores usam alfa direto. Sempre que você passa uma cor para um Draw*
método or Fill*
, define a cor de um pincel ou limpa para um valor de cor, essa cor é especificada usando alfa direto.
Os valores de pixel armazenados em um bitmap ou rendertarget e as operações de desenho ou mesclagem que operam nessas superfícies usam alfa pré-multiplicado. Quando os bitmaps são carregados de um arquivo, seu conteúdo é convertido automaticamente em formato pré-multiplicado. Quando você chama um método de desenho Win2D, seu parâmetro de cor é convertido de direto para pré-multiplicado antes que o desenho real ocorra.
Os efeitos de imagem Win2D usam uma mistura de alfa direto e pré-multiplicado. Alguns efeitos operam em um formato, outros no outro, e alguns fornecem uma propriedade para escolher. A documentação de cada tipo de efeito descreve qual modo alfa ele usa. Os dados de entrada do efeito são sempre considerados pré-multiplicados, portanto, quando um efeito precisa funcionar com alfa direto, ele primeiro aplica uma transformação não pré-multiplicada, calcula o efeito e, em seguida, re-pré-multiplica a saída.
As APIs GetPixelBytes
de bitmap , SetPixelBytes
, GetPixelColors
e SetPixelColors
, não executam nenhuma conversão de formato alfa. Eles apenas transferem valores de bits diretamente de ou para a textura subjacente da GPU. Isso permite que você observe qual formato alfa o Win2D está usando internamente:
drawingSession.Clear(Colors.Tranparent)
Colors.Tranparent
é definido como R = 255, G = 255, B = 255, A = 0GetPixelColors
para ler o conteúdo do rendertargetColors.Tranparent
direto originalPara converter um valor de cor alfa direto para o formato pré-multiplicado, multiplique seus valores R, G e B por A. Para converter pré-multiplicado em reto, divida R, G e B por A.
Observe que as informações de cor geralmente são representadas como valores de bytes que variam de 0 a 255 (por exemplo, a Windows.UI.Color
estrutura consiste em 4 bytes). Essa representação é ampliada por um fator de 255, portanto, um valor de byte de 255 na verdade significa 1, enquanto 128 é metade da intensidade. Esse fator de escala deve ser levado em consideração durante as conversões de formato, portanto, para converter um Windows.UI.Color
de direto para pré-multiplicado:
premultiplied.R = (byte)(straight.R * straight.A / 255);
premultiplied.G = (byte)(straight.G * straight.A / 255);
premultiplied.B = (byte)(straight.B * straight.A / 255);
premultiplied.A = straight.A;
Se você tiver dados de imagem que estão usando o formato PremultiplyEffect
alfa errado ou UnPremultiplyEffect
podem ser usados para convertê-los.
Comentários do Windows developer
O Windows developer é um projeto código aberto. Selecione um link para fornecer comentários:
Treinamento
Módulo
Develop products with accessible color and contrast - Training
Learn the importance of color and contrast in digital design for accessibility.