2012-12-01 69 views
3

通過調用getRGB(int x, int y)BufferedImage對象,可以獲得單個負數。Java - 紅色,綠色,藍色可獲得RED

如何將三個不同的值(紅色,綠色和藍色)轉換爲此單個負數?

+0

BTW。每個BufferedImage都包含一個包含所有像素的數組。如果BufferedImage是TYPE_INT_RGB類型,則該數組將是一個int數組。所以如果你想做很多像素操作,你可以通過直接寫入數組來加速程序。你可以使用int [] pixels =((DataBufferInt)image.getRaster()。getDataBuffer())。getData() – SpiderPig

回答

10

使用顏色類:

new Color(r, g, b).getRGB() 
+0

這會使用比必要的資源更多的資源。 – Vulcan

+0

但它的作品,非常感謝你先生! – Confiqure

+0

@Vulcan:同意。但是Color是開源的,所以OP可以「竊取」代碼。 –

3

BufferedImage的最終委託給java.awt.image.ColorModel它使用下面的代碼:

public int getRGB(Object inData) { 
    return (getAlpha(inData) << 24) 
     | (getRed(inData) << 16) 
     | (getGreen(inData) << 8) 
     | (getBlue(inData) << 0); 
} 

修改此以滿足您的需求,是一個平凡的工作。

-1

JB Nizet的回答很好,但是在創建數千次'Color'類型的新對象時,它確實很慢。最簡單的方法是:

int rgb = (red << 16 | green << 8 | blue) 

如回答ByteBit

+2

你偷了嗎?大聲笑http://stackoverflow.com/questions/24594046/converting-red-green-and-blue-to-rgb/24596140#24596140 – ByteBit

+0

我很抱歉沒有提供你的答案。現在看編輯 – Nepster

相關問題