Alpha compositing

27 марта 2017, 15:28
Timur Gatin
0
38

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

Так как в МТ максимальное значение альфа равно 255, из 1 нужно вычитать аа/255.

a - верхний слой, b - нижний слой.


Теперь о ENUM_COLOR_FORMAT.

Представление цвета с альфа каналом бывает двух видов: straight и premultiplied.

Для straight нужно использовать COLOR_FORMAT_ARGB_NORMALIZE и формулы для С0 и а0.

Для premultiplied используем COLOR_FORMAT_ARGB_RAW и формулы для с0 и а0. В режиме premultiplied предполагается, что значение цвета умножено на альфу. Например, имеется straight (обычное) ARGB(51,125,190,60), для преобразования в premultiplied домножаем значения цветов на 0.2 (51/255), получим ARGB(51,25,38,12).

COLOR_FORMAT_ARGB_NORMALIZE в 2 раза медленнее COLOR_FORMAT_ARGB_RAW. Время создания ресурса зависит от размера изображения. ObjCCanvas.Erase() в 10 раз быстрее ObjCCanvas.Update().
Поделитесь с друзьями: