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 SrcOver
que 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 ContentPage
pá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.