在sRGB的色彩空間工作的幫助下,很容易實現,這是否一種方法。
考慮以下方法:
private static BufferedImage createColorFromGrayscale(BufferedImage red, BufferedImage green, BufferedImage blue){
BufferedImage base = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_INT_ARGB);
for(int x = 0;x < red.getWidth();x++){
for(int y = 0; y < red.getHeight(); y++){
int rgb = (red.getRGB(x, y) & 0x00FF0000) | (green.getRGB(x, y) & 0x0000FF00) | (blue.getRGB(x, y) & 0x000000FF);
base.setRGB(x, y, (rgb | 0xFF000000));
}
}
return base;
}
創建新的基礎圖像,我們通過使用按位AND和OR來創建格式ARGB一個4字節整數顏色被分配給基本圖像創建的顏色分量。通過for循環遍歷整個圖像,我們可以將生成的基本圖像的每個像素分別設置爲每個通道的顏色。
此方法假設所有三個圖像的大小相等。如果圖像尺寸不相同,則必須單獨處理(例如通過在輸入之前拉伸圖像或修改方法以接受不同尺寸的圖像)。
PS:直接使用一個圖像可能更有效在BufferedImage的實例作爲基本圖像的大的圖片的時候,以節省內存...
我會嘗試找出。 –