Compartilhar via


SkiaSharp modos de mistura

Estes artigos se concentram na BlendMode propriedade de SKPaint. A BlendMode propriedade é do tipo SKBlendMode, uma enumeração com 29 membros.

A BlendMode propriedade determina o que acontece quando um objeto gráfico (geralmente chamado de origem) é renderizado sobre objetos gráficos existentes (chamado de destino). Normalmente, esperamos que o novo objeto gráfico obscureça os objetos abaixo dele. Mas isso acontece apenas porque o modo de mesclagem padrão é SKBlendMode.SrcOver, o que significa que a origem é desenhada sobre o destino. Os outros 28 membros do grupo SKBlendMode causam outros efeitos. Na programação gráfica, a técnica de combinar objetos gráficos de várias maneiras é conhecida como composição.

A enumeração SKBlendModes

Os modos de mistura SkiaSharp correspondem de perto aos descritos na especificação W3C Compositing and Blending Level 1 . A visão geral do Skia SkBlendMode também fornece informações básicas úteis. Para uma introdução geral aos modos de mistura, o artigo Modos de mistura na Wikipédia é um bom começo. Os modos de mesclagem são suportados no Adobe Photoshop, portanto, há muitas informações on-line adicionais sobre os modos de mesclagem nesse contexto.

Os 29 membros da SKBlendMode enumeração podem ser divididos em três categorias:

Porter-Duff Separável Não separável
Clear Modulate Hue
Src Screen Saturation
Dst Overlay Color
SrcOver Darken Luminosity
DstOver Lighten
SrcIn ColorDodge
DstIn ColorBurn
SrcOut HardLight
DstOut SoftLight
SrcATop Difference
DstATop Exclusion
Xor Multiply
Plus

Os nomes dessas três categorias ganharão mais significado nas discussões que se seguem. A ordem em que os membros são listados aqui é a mesma que na definição da SKBlendMode enumeração. Os 13 membros de enumeração na primeira coluna têm os valores inteiros de 0 a 12. A segunda coluna são membros de enumeração que correspondem a inteiros de 13 a 24, e os membros na terceira coluna têm valores de 25 a 28.

Esses modos de mesclagem são discutidos aproximadamente na mesma ordem no documento W3C Compositing and Blending Level 1, mas há algumas diferenças: O Src modo é chamado de Copiar no documento do W3C e Plus é chamado de Lighter. O documento W3C define um modo de mesclagem Normal que não está incluído no SKBlendModes porque seria o mesmo SrcOverque o . O Modulate modo de mesclagem (na parte superior da segunda coluna) não está incluído no documento do W3C e a discussão do modo precede Screen.Multiply

Como o modo de mesclagem é exclusivo do Modulate Skia, ele será discutido como um modo Porter-Duff adicional e como um modo separável.

A importância da transparência

Historicamente, a composição foi desenvolvida em conjunto com o conceito do canal alfa. Em uma superfície de exibição, como o SKCanvas objeto e um bitmap colorido, cada pixel consiste em 4 bytes: 1 byte cada para os componentes vermelho, verde e azul e um byte adicional para transparência. Esse componente alfa é 0 para transparência total e 0xFF para opacidade total, com diferentes níveis de transparência entre esses valores.

Muitos dos modos de mistura dependem da transparência. Normalmente, quando um SKCanvas é obtido pela primeira vez em um PaintSurface manipulador, ou quando um SKCanvas é criado para desenhar em um bitmap, a primeira etapa é esta chamada:

canvas.Clear();

Esse método substitui todos os pixels da tela por pixels pretos transparentes, equivalentes ou new SKColor(0, 0, 0, 0) o 0x00000000 inteiro. Todos os bytes de todos os pixels são inicializados para zero.

A superfície de desenho de um SKCanvas que é obtido em um PaintSurface manipulador pode parecer ter um plano de fundo branco, mas isso é apenas porque o SKCanvasView próprio tem um plano de fundo transparente e a página tem um plano de fundo branco. Você pode demonstrar esse fato para si mesmo definindo a Xamarin.FormsBackgroundColor propriedade de SKCanvasView para uma Xamarin.Forms cor:

canvasView.BackgroundColor = Color.Red;

Ou, em uma classe derivada do , você pode definir a cor do plano de fundo da ContentPagepágina:

BackgroundColor = Color.Red;

Você verá esse plano de fundo vermelho atrás dos gráficos do SkiaSharp porque a própria tela do SkiaSharp é transparente.

O artigo SkiaSharp Transparency mostrou algumas técnicas básicas no uso da transparência para organizar vários gráficos em uma imagem composta. Os modos de mistura vão além disso, mas a transparência continua sendo crucial para os modos de mistura.

SkiaSharp Porter-Duff modos de mistura

Use os modos de mesclagem Porter-Duff para compor cenas com base em imagens de origem e destino.

SkiaSharp modos de mistura separáveis

Use os modos de mesclagem separáveis para alterar as cores vermelha, verde e azul.

SkiaSharp modos de mistura não separáveis

Use os modos de mesclagem não separáveis para alterar a tonalidade, a saturação ou a luminosidade.