Получить пиксельный цвет после альфа-смешения - PullRequest
0 голосов
/ 01 марта 2011

У меня есть цвет RGBA, например

255, 0, 0, 100

Как я могу получить RGB, если его положить на белый фон?например.этот красный станет светлее и будет больше похож на

255, 100, 100

И то же самое, если его поставить на черный фон.?

Предпочтительно c ++

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

В качестве примера к моему комментарию:

struct Color
{
    int R;
    int G;
    int B;
    int A;
};

Color Blend(Color c1, Color c2)
{
    Color result;
    double a1 = c1.A / 255.0;
    double a2 = c2.A / 255.0;

    result.R = (int) (a1 * c1.R + a2 * (1 - a1) * c2.R);
    result.G = (int) (a1 * c1.G + a2 * (1 - a1) * c2.G);
    result.B = (int) (a1 * c1.B + a2 * (1 - a1) * c2.B);
    result.A = (int) (255 * (a1 + a2 * (1 - a1)));
    return result;
}


void Example()
{
    Color c1;
    c1.R = 255;
    c1.G = 0;
    c1.B = 0;
    c1.A = 100;

    Color c2;
    c2.R = 255;
    c2.G = 255;
    c2.B = 255;

    Color blended = Blend(c1, c2);
    int x = 50;
    int y = 100;

    // Pretend function that draws a pixel at (x, y) with rgb values
    DrawPixel(x, y, blended.R, blended.G, blended.B);
}
0 голосов
/ 01 марта 2011

Зависит от функции смешивания.

Девять различных функций смешивания с формулой для каждой описаны в документации glBlendFunc.

...