2015-03-31 43 views
2

我有一個小問題。 我有一個具有RGB值的像素的BufferedImage。 此代碼用於從de R,G,B,A值創建RGB值。在java中更改bufferedImage像素

private int getRGB(int r, int g, int b, int a){ 
    return (a << 24) | (r << 16) | (g << 8) | b; 
} 

第一個問題是,如何獲得的R,G,B,從像素A的值,這是因爲像素RGB將返回由代碼生成上述數。

如果我有這些值,我可以把2個像素放在另一個上面,這樣它就可以計算出新的值,還是我必須通過手動來做到這一點? 使用自動計算功能,您可以將Java 2D放在最上面的2個運輸工具上,它將合併顏色。

非常感謝。

+0

對於問題的第二部分,請參閱[Alpha合成](http://en.wikipedia.org/wiki/Alpha_compositing)。但是,如果您只能使用Java 2D,那將使生活更輕鬆,因爲它已經實現了Porter/Duff alpha合成(請參閱'Graphics2D'和'AlphaComposite'類)。 – haraldK 2015-03-31 17:46:17

回答

2

第一個問題是,如何從像素中獲取R,G,B,A值,因爲像素RGB將返回由上述代碼生成的數字。

如下您可以逆轉這一過程:

int a = (argb >> 24) & 0xFF; 
int r = (argb >> 16) & 0xFF; 
int g = (argb >> 8) & 0xFF; 
int b = (argb >> 0) & 0xFF; 

如果我有這些價值觀,我可以把2個像素在彼此的頂部,這樣就計算出新的價值還是我通過手動來做到這一點?通過自動計算,您可以將Java 2D放在最上面的2個運輸工具上,它將合併顏色。

由於您需要決定如何合成顏色,因此您需要手動執行此操作(或調用每像素的實用程序方法)。你可以使用最大值,總和,平均值等像素值。

+2

當然,程序員必須決定如何完成組合,但一旦做出決定,就會有一個名爲AWT/Java2D的豐富API,可以[用於](http://docs.oracle.com/ javase/7/docs/api/java/awt/AlphaComposite.html)[任務](http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setComposite(java .awt.Composite)); ['BufferedImage.createGraphics()'](http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#createGraphics())使它成爲可能。除非我們知道OP爲什麼說「你能想到Java 2D」,而不是僅僅使用Java 2D ...... – Holger 2015-03-31 11:14:00