後,我有一個RGBA顏色像獲取像素顏色的阿爾法混合
255,0,0,100
我怎樣才能獲得RGB如果它被放到一個白色的背景? 例如。這個紅會變得更輕,更喜歡
255,100,100
,同樣的事情,如果它被放到一個黑色的背景。
這是否足夠有意義?
優選C++
後,我有一個RGBA顏色像獲取像素顏色的阿爾法混合
255,0,0,100
我怎樣才能獲得RGB如果它被放到一個白色的背景? 例如。這個紅會變得更輕,更喜歡
255,100,100
,同樣的事情,如果它被放到一個黑色的背景。
這是否足夠有意義?
優選C++
作爲一個例子,以我的意見:
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);
}
測試另一個答案現在...很快得到... – 2011-03-01 02:13:48
Ben鏈接的頁面也很有用。你必須小心你想要什麼類型的混合,以及如何混合,因爲一些不是聯想(Blend(a,b)!= Blend(b,a))。 – 2011-03-01 02:16:41
爲什麼你使用字符不是他們的整數?另外,我應該如何正確使用它?我需要聲明一個Color mycol並設置.r .g等等。 – 2011-03-01 02:22:47
這取決於混合功能。
glBlendFunc
文檔中描述了九種不同的混合功能,每種都有一個公式。
術語阿爾法混合意味着一個特定的混合函數 - 在OpenGL中,它將是(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。其他任何事情都是「混合」,但不是「混合」。 – 2011-03-01 02:32:46
@Stefan:根據您是否使用預乘alpha,仍然有不同的功能。 – 2011-03-01 02:35:28
確實,在預乘alpha的情況下公式是不同的。 – 2011-03-01 02:40:02
查看wiki文章。這是非常有用的:http://en.wikipedia.org/wiki/Alpha_compositing#Description – 2011-03-01 01:59:39
看起來非常有用 – 2011-03-01 02:04:39
之前有人發佈了另一個答案之前,像一個魅力工作......不知道它去了哪裏...... – 2011-03-01 02:19:53