2012-09-12 94 views
1

顏色我希望做兩件事情:合併/比較Java中

  1. 比較兩種顏色(RGB),這樣比較器給我說一聲,如果顏色是相同的,並且0,如果比較的顏色在RGB的相反兩側像黑色和白色,以及某些數字從0到1(如果它們在某種程度上相等)(如兩者都是紅色的)
  2. 將2種或更多種顏色混合在一起產生一個新的:混合藍色和黃色應該給我綠色,混合紅色和綠色應該給黑等

問題: 是否有任何部分的Java API可以爲我做這樣的事情?如果不是有任何第三方的開源java庫可以促進這一點?

謝謝。

+1

你看過:http://stackoverflow.com/questions/9018016/how-to-compare-two-colors? – condit

+0

謝謝,我已經看到了,它看起來很複雜,我現在沒有時間去理解它。 – BanditoBunny

+0

顏色距離度量標準通常很複雜。你可以通過像* 1 - A/B *這樣的方式作弊(如果準確性不是很大)。 – oldrinb

回答

1

1.

有很多不同的方法來比較顏色。如果你想要感知不同,請查看其他用戶的評論。如果你只是想一些簡單的給出指示:使用此代碼:

int rgb1 = ... 
int rgb2 = ... 
int r, g, b; 

r = (rgb1 >> 16) & 0x000000ff; 
g = (rgb1 >> 8) & 0x000000ff; 
b = rgb1 & 0x000000ff; 

r -= (rgb2 >> 16) & 0x000000ff; 
g -= (rgb2 >> 8) & 0x000000ff; 
b -= rgb2 & 0x000000ff; 

double answer = (r*r+g*g+b*b)/(255*255*3.0); 

它計算歐幾里得距離和規模它的範圍從0到1

2.

就像有很多不同的方式來比較顏色一樣,有很多方法可以組合顏色。這取決於你想要什麼。 你可以取平均值,但這不是你想要的。因爲它會使得到的顏色變暗。

編輯:這裏是取平均的代碼:

r = (rgb1 >> 16) & 0x000000ff; 
g = (rgb1 >> 8) & 0x000000ff; 
b = rgb1 & 0x000000ff; 

r += (rgb2 >> 16) & 0x000000ff; 
g += (rgb2 >> 8) & 0x000000ff; 
b += rgb2 & 0x000000ff; 

int average = ((r/2)<<16)+((g/2)<<8)+(b/2); 

如果你有點數學的思考哪些行爲你真正尋找,並儘量把它放在一個公式(或者3個公式,一個用於紅色,一個用於綠色,另一個用於藍色) 將公式轉換爲java代碼不應該很難。

你可以把單獨的R,G和B值放回使用

INT RGB =(R < < 16)的單個RGB值| (g < < 8)| b

編輯:請注意,計算機使用「紅色綠色藍色」工作,其中黃色是綠色和藍色的組合,而不是其他方式。轉換可以完成,但我還沒有完成。也許conversion between rgb and ryb color spaces可能會有所幫助。

+0

感謝您的回答,如果我有公式。我會先嚐試分別拿出每種顏色的平均值,看看會發生什麼。 – BanditoBunny

+0

另外:使用'java.awt.Color'可能會讓你的代碼更容易閱讀... int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue();新顏色(r,g,b); – neXus