在 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 创建一个颜色分量,以创建一个 4 字节的 ARGB 格式的整数颜色,该颜色分配给基础图像。通过 for 循环遍历整个图像,我们能够将生成的基础图像的每个像素分别设置为每个通道的颜色。
此方法假定所有三个图像的大小相同。如果图像大小不相等,则必须单独处理(例如,通过在输入之前拉伸图像或修改方法以接受不同大小的图像。)
PS:在处理大图像时,直接使用其中一个缓冲图像实例作为基础图像以节省内存可能会更有效......