Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Название родительского класса PorterDuff дано в честь двух программистов Thomas Porter и Tom Duff, которые опубликовали свою работу "Compositing Digital Images" в 1984 году о смешении двух цифровых изображений. Обратите внимание, что у разработчиков были популярные на Западе кошачьи имена Том и Томас, возможно они были котами.
Эти котаны описали 12 основных операций, которые возможны при наложении двух изображений с учётом канала прозрачности. Для удобства в класс добавили другие режимы, основанные на наложении фигур без учёта альфа-канала.
При описании режимов используют два изображения, один обозначается как Source (src), второй как Destination (dst). Чтобы увидеть, как работает тот или иной режим, берут две простые фигуры разных цветов и накладывают друг на друга. Результат получается наглядным и понятным. Поняв принцип, вы можете уже взять изображение кота и применить к нему нужный эффект.
Перечисление PorterDuff.Mode содержит названия, которые применимы в коде. Иногда проще увидеть на картинке, чем перевести, поэтому часть текста оставил без изменений.
Добавляет исходные пиксели к целевым пикселям, общие пиксели перекрашиваются (насыщение).
Пиксели очищаются в 0. Ничего не отображается.
Retains the smallest component of the source and destination pixels.
Исходные пиксели отбрасываются, оставляя целевые пиксели нетронутымы.
Отбрасываются целевые пиксели, не покрытые исходными пикселями.
Сохраняются целевые пиксели, покрытые исходными пикселями. Всё остальное отбрасывается.
Сохраняются целевые пиксели, не покрытые исходными пикселями.
Исходные пиксели рисуются за целевыми пикселями.
Retains the largest component of the source and destination pixel.
Multiplies the source and destination pixels.
Multiplies or screens the source and destination depending on the destination color.
Adds the source and destination pixels, then subtracts the source pixels multiplied by the destination.
Отображаются только исходные пиксели.
Отбрасываются исходные пиксели, не покрытые целевыми пикселями.
Отображается часть исходных пикселей, которая пересекается с целевыми пикселями. Все остальные пиксели у обоих фигур убираются.
Отображаются исходные пиксели, не закрытые целевыми пикселями.
Исходные пиксели отображаются над целевыми.
Отображаются исходные и целевые пиксели без части их пересечения.
PorterDuff.Mode, PorterDuffXfermode
Practical Image PorterDuff Mode Usage in Android