Вычисление комбинированного цвета двух цветов (оператор Over) - PullRequest
2 голосов
/ 19 февраля 2012

Это для приложения Android. Допустим, у меня есть два цвета с альфа

int color1 = 0x12345678  // aarrggbb
int color2 = 0x87654321

Как вычислить объединенный цвет слоя с цветом2 над слоем с цветом1?

Я нашел здесь обсуждение и формулу, но сначала проверил здесь, доступна ли она в Android и / или Java, прежде чем писать собственный код.

http://en.wikipedia.org/wiki/Alpha_compositing#Analytical_derivation_of_the_over_operator

Редактировать: обратите внимание, что целью этого вопроса является не растровое изображение, а цвет (например, aarrggbb int).

Ответы [ 3 ]

5 голосов
/ 20 февраля 2012

Я закончила это. Прямое переписывание формулы Википедии. Любая проблема с этим осуществление

// a2 over a1
private static int compositeAlpha(int a1, int a2) {
    return 255 - ((255 - a2) * (255 - a1)) / 255;
}


// For a single R/G/B component. a = precomputed compositeAlpha(a1, a2)
private static int compositeColorComponent(int c1, int a1, int c2, int a2, int a) {
    // Handle the singular case of both layers fully transparent.
    if (a == 0) {
        return 0x00;
    }
    return (((255 * c2 * a2) + (c1 * a1 * (255 - a2))) / a) / 255;
}

// argb2 over argb1. No range checking.
public static int compositeColor(int argb1, int argb2) {
    final int a1 = Color.alpha(argb1);
    final int a2 = Color.alpha(argb2);

    final int a = compositeAlpha(a1, a2);

    final int r = compositeColorComponent(Color.red(argb1), a1,   
            Color.red(argb2), a2, a);
    final int g = compositeColorComponent(Color.green(argb1), a1, 
            Color.green(argb2), a2, a);
    final int b = compositeColorComponent(Color.blue(argb1), a1, 
        Color.blue(argb2), a2, a);

    return Color.argb(a, r, g, b);
}
1 голос
/ 19 февраля 2012

Я думаю, что вы хотите, может быть PorterDuff.Mode.Multiply

... используется с PorterDuffColorFilter .

РЕДАКТИРОВАТЬ: На самом деле возможноВы хотите режим DST_OVER для целевого цвета "поверх" исходного цвета.

0 голосов
/ 19 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...