2011-03-01 58 views
0

後,我有一個RGBA顏色像獲取像素顏色的阿爾法混合

255,0,0,100

我怎樣才能獲得RGB如果它被放到一個白色的背景? 例如。這個紅會變得更輕,更喜歡

255,100,100

,同樣的事情,如果它被放到一個黑色的背景。

這是否足夠有意義?

優選C++

+2

查看wiki文章。這是非常有用的:http://en.wikipedia.org/wiki/Alpha_compositing#Description – 2011-03-01 01:59:39

+0

看起來非常有用 – 2011-03-01 02:04:39

+0

之前有人發佈了另一個答案之前,像一個魅力工作......不知道它去了哪裏...... – 2011-03-01 02:19:53

回答

3

作爲一個例子,以我的意見:

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

測試另一個答案現在...很快得到... – 2011-03-01 02:13:48

+0

Ben鏈接的頁面也很有用。你必須小心你想要什麼類型的混合,以及如何混合,因爲一些不是聯想(Blend(a,b)!= Blend(b,a))。 – 2011-03-01 02:16:41

+0

爲什麼你使用字符不是他們的整數?另外,我應該如何正確使用它?我需要聲明一個Color mycol並設置.r .g等等。 – 2011-03-01 02:22:47

-1

這取決於混合功能。

glBlendFunc文檔中描述了九種不同的混合功能,每種都有一個公式。

+0

術語阿爾法混合意味着一個特定的混合函數 - 在OpenGL中,它將是(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。其他任何事情都是「混合」,但不是「混合」。 – 2011-03-01 02:32:46

+0

@Stefan:根據您是否使用預乘alpha,仍然有不同的功能。 – 2011-03-01 02:35:28

+0

確實,在預乘alpha的情況下公式是不同的。 – 2011-03-01 02:40:02