Режимы смешения SkiaSharp

В этих статьях основное внимание уделяется свойству BlendModeSKPaint. Свойство BlendMode имеет тип SKBlendMode, перечисление с 29 элементами.

Свойство BlendMode определяет, что происходит, когда графический объект (часто называемый источником) отрисовывается поверх существующих графических объектов (называемых назначением). Как правило, мы ожидаем, что новый графический объект скрывает объекты под ним. Но это происходит только потому, что режим SKBlendMode.SrcOverсмешивания по умолчанию , что означает, что источник рисуется по назначению. Другие 28 членов причины других последствий SKBlendMode . В графическом программировании метод объединения графических объектов различными способами называется компостированием.

Перечисление S КБ lendModes

Режимы смешения SkiaSharp тесно соответствуют описанным в спецификации W3C Compositing и Blending Level 1 . Обзор Skia SkBlendMode также предоставляет полезные справочные сведения. Общее введение в режимы смешивания, статья о режимах blend в Википедии является хорошим началом. Режимы смешивания поддерживаются в Adobe Photoshop, поэтому в этом контексте есть много дополнительных сведений о режимах смешения.

29 членов перечисления SKBlendMode можно разделить на три категории:

Портер-Дафф Разделяющимися Неразделимые
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

Имена этих трех категорий будут иметь больше смысла в следующих обсуждениях. Порядок перечисления элементов совпадает с определением перечисления SKBlendMode . 13 элементов перечисления в первом столбце имеют целые значения от 0 до 12. Второй столбец — это элементы перечисления, соответствующие целым числам 13–24, а члены в третьем столбце имеют значения 25–28.

Эти режимы смешения рассматриваются примерно в том же порядке в документе W3C Compositing и Blending Level 1, но есть несколько различий: Src режим называется Copy в документе W3C и Plus называется Lighter. Документ W3C определяет обычный режим смешивания, который не входит в SKBlendModes состав, так как он будет совпадатьSrcOver. Режим Modulate смешения (в верхней части второго столбца) не включен в документ W3C, а обсуждение Multiply режима предшествует Screen.

Modulate Так как режим смешивания является уникальным для Skia, он будет обсуждаться в качестве дополнительного режима Porter-Duff и в качестве режимов сепарабельного режима.

Важность прозрачности

Исторически создание было разработано в сочетании с концепцией альфа-канала. В области отображения, такой как SKCanvas объект и полноцветное растровое изображение, каждый пиксель состоит из 4 байтов: 1 байт для красных, зеленых и синих компонентов, а также дополнительный байт для прозрачности. Этот альфа-компонент равен 0 для полной прозрачности и 0xFF для полной прозрачности с разными уровнями прозрачности между этими значениями.

Многие из режимов смешивания зависят от прозрачности. Как правило, при SKCanvas первом получении в обработчике или при SKCanvas создании для рисования на растровом PaintSurface рисунке первым шагом является следующий вызов:

canvas.Clear();

Этот метод заменяет все пиксели холста прозрачными черными пикселями, эквивалентными new SKColor(0, 0, 0, 0) целочисленным 0x00000000. Все байты всех пикселей инициализированы до нуля.

Поверхность рисования SKCanvas , полученная в обработчике PaintSurface , может иметь белый фон, но это только потому, что SKCanvasView сам имеет прозрачный фон, и страница имеет белый фон. Этот факт можно продемонстрировать себе, задав Xamarin.FormsBackgroundColor свойству SKCanvasViewXamarin.Forms цвета:

canvasView.BackgroundColor = Color.Red;

Кроме того, в классе, наследуемом от ContentPageэтого, можно задать цвет фона страницы:

BackgroundColor = Color.Red;

Вы увидите этот красный фон за графикой SkiaSharp, так как сам холст SkiaSharp является прозрачным.

В статье SkiaSharp Transparency показаны некоторые основные методы использования прозрачности для упорядочивания нескольких графиков в составном изображении. Режимы смешения выходят за рамки этого, но прозрачность остается важной для режимов смешивания.

Режимы смешения SkiaSharp Porter-Duff

Используйте режимы смешивания Porter-Duff для создания сцен на основе исходных и целевых изображений.

Режимы смешения skiaSharp с разделителями

Используйте режимы сепарабельной смеси для изменения красных, зеленых и синих цветов.

Режимы смешения skiaSharp без разделителя

Используйте неразделимые режимы смешения, чтобы изменить оттенки, насыщенность или светимость.