Как смешать альфа-значения? - PullRequest
1 голос
/ 26 апреля 2011

В AWT Java alpha (непрозрачность) выражается с использованием значений от 0 (полностью прозрачный) до 255 (полностью непрозрачный).Как правильно смешать альфа-значения, например, чтобы реализовать эффект затухания?Если дочерний элемент имеет альфа 200 относительно своего родителя, а родительский элемент имеет альфа 100, какова альфа пикселей, которые в конечном итоге отображаются?

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Насколько вы контролируете альфа-значения пикселей? Какой эффект затухания вы ищете?

Различные графические системы могут по умолчанию реализовывать разные альфа-операции. Я думаю, что наиболее интуитивным и, таким образом, по умолчанию обычно является:

   DestColor = DestColor * (1 - SourceAlpha) + SourceColor * SourceAlpha
   DestAlpha left as-is

При использовании этой схемы альфа-источник влияет только на цветовой компонент поверхности назначения, а не на саму альфа-поверхность назначения.

Я не уверен, как ведет себя AWT или дает ли он какой-либо уровень контроля над операциями альфа-смешения, но теоретически альфа может применяться различными способами.

1 голос
/ 26 апреля 2011

Я думаю, что это правильно: альфа 200 для child означает

blended = 200/255 * child + (1 - 200/255) * parent

Мы привыкли к этому для значения в пикселях, но мы могли бы также интерполировать альфа-канал таким же образом. Мы должны сделать вид, что «реальное» альфа-значение child равно 255:

blended = 255 * 200/255   +     100 * (1 - 200/255)
          child.alpha           parent.alpha

, что приблизительно равно 222.

Этот вопрос также может быть полезен.

...