Обработка альфа-смешивания в Java

Я работаю над обработкой, и я хотел бы воссоздать на низкоуровневом коде самую легкую смесь функций.

Я видел в документации, что C = max(A * factor, B)

  • C — возвращаемый цвет
  • A является источником
  • B это изображение для микширования

Я видел в Интернете, что указанный коэффициент основан на альфа-компоненте исходного пикселя, который представлен первыми 8 битами (слева) 32-битного целого числа, представляющего цвет пикселя. Эти крайние левые биты также называются старшими битами.

Источник. =fr&sa=X&ei=sDqJUIKUHeOq0QWy9YHYBA&ved=0CCsQ6AEwAQ#v=onepage&q=C%20=%20max%28A%2afactor,%20B%29%20processing&f=false" rel="nofollow">эта книга, стр. 464

Что я должен об этом думать?

Это мой код этой части:

for (int y = 0; y < capWidth * capHeight; y++) {
    int factor = (pixels[y] >> 24) & 0xFF;
    pixels[y] = max(pixels[y] * factor, previousFrame.pixels[y]);      
} 

Это не работает, помочь?


person Samsy    schedule 25.10.2012    source источник
comment
определяет it doesnt work   -  person UmNyobe    schedule 25.10.2012


Ответы (3)


Для каждого цвета: C = A(a/255) + B(1-(a/255)), где:

A - значение переднего плана,

B – фоновое значение,

C - результирующее значение, а

а — альфа-компонента.

Это соответствует вики-странице альфа-смешивания: http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending

person LJ2    schedule 25.10.2012

  1. это не сработает, потому что factor в вашей исходной формуле — это число с плавающей запятой от 0 до 1, а factor в вашем коде — целое число от 0 до 255.
  2. это не формула для смешивания, не совсем. Для смешивания вам нужно добавить цвета, а не брать максимум
person Qnan    schedule 25.10.2012
comment
Ok ! так как я должен интерпретировать это? C = max(A * factor, B) это формула для смешивания самых светлых пикселей. Документация по обработке веб-сайта не дает дополнительных советов по этому поводу :/ - person Samsy; 26.10.2012
comment
как я уже сказал, вам нужно преобразовать factor в другой диапазон. В данном случае это означает деление на 255,0 и сохранение как float, а не int. Насколько я вижу, ваша реализация в остальном верна, если вы пытаетесь достичь того, что называется САМЫМ ЛЕГКИМ режимом в книге, которую вы цитируете. - person Qnan; 26.10.2012

http://processing.googlecode.com/svn/trunk/processing/build/javadoc/core/index.html

Я получил его здесь, javadoc обработки SVG для смешивания Lighten! Хорошо !

person Samsy    schedule 26.10.2012