顏色我希望做兩件事情:合併/比較Java中
- 比較兩種顏色(RGB),這樣比較器給我說一聲,如果顏色是相同的,並且0,如果比較的顏色在RGB的相反兩側像黑色和白色,以及某些數字從0到1(如果它們在某種程度上相等)(如兩者都是紅色的)
- 將2種或更多種顏色混合在一起產生一個新的:混合藍色和黃色應該給我綠色,混合紅色和綠色應該給黑等
問題: 是否有任何部分的Java API可以爲我做這樣的事情?如果不是有任何第三方的開源java庫可以促進這一點?
謝謝。
顏色我希望做兩件事情:合併/比較Java中
問題: 是否有任何部分的Java API可以爲我做這樣的事情?如果不是有任何第三方的開源java庫可以促進這一點?
謝謝。
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可能會有所幫助。
感謝您的回答,如果我有公式。我會先嚐試分別拿出每種顏色的平均值,看看會發生什麼。 – BanditoBunny
另外:使用'java.awt.Color'可能會讓你的代碼更容易閱讀... int r = color.getRed(); int g = color.getGreen(); int b = color.getBlue();新顏色(r,g,b); – neXus
你看過:http://stackoverflow.com/questions/9018016/how-to-compare-two-colors? – condit
謝謝,我已經看到了,它看起來很複雜,我現在沒有時間去理解它。 – BanditoBunny
顏色距離度量標準通常很複雜。你可以通過像* 1 - A/B *這樣的方式作弊(如果準確性不是很大)。 – oldrinb