如何在java中将16位灰度图像转换为RGB图像?

时间:2012-06-27 12:21:08

标签: java image swing jai

我正在使用Netbeans平台在Java Swing中制作桌面应用程序。我想将16位灰度图像转换为RGB图像。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

灰度保持单个值,黑色,而RBG保持三个,红色,蓝色和绿色。您可以做的最好的是单色图像,您可以使用getRGB(x, y)类中的BufferedImage方法执行此操作。由于您的输入图像是灰度的,因此您可以从中获取三种颜色值中的任何一种,因为它们应该是相同的。然后将该值用于您选择的任何颜色作为单色的基础。

以下是红色的例子:

public BufferedImage changeToRedMonochrome(BufferedImage grayImage)
{
    int width = grayImage.getWidth();
    int height = grayImage.getHeight()

    BufferedImage redImage = new BufferedImage(
        width, height, BufferedImage.TYPE_INT_RGB);

    for (int y=0; y<height; y++)
    {
        for (int x=0; x<width; x++)
        {
            Color grayColor = new Color(grayImage.getRGB);
            int gray = grayColor.getRed();

            int red = (gray > 127) ? 255 : gray/2;
            int blue = (gray > 127 ? gray/2 : 0;
            int green = (gray > 127 ? gray/2 : 0;

            Color redColor = new Color(red, blue, green);
            redImage.setRGB(x, y, redColor);
        }
    }
}

这不是完美的代码,当然你需要调整它以满足你的特定需求,但这是你制作单色图像的一种方式。

答案 1 :(得分:1)

Incompl描述的getRGB / setRGB方法应该可行。但是,如果我没记错的话,它的表现相当差(这些方法做了很多工作,在这种情况下是不必要的)。我认为使用新图像并让Java优化从BufferedImage.TYPE_USHORT_GRAYBufferedImage.TYPE_INT_RGB的转换会快得多:

int width = grayImage.getWidth();
int height = grayImage.getHeight()

BufferedImage newImage = new BufferedImage(
    width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = newImage.getGraphics();  
g.drawImage(grayImage, 0, 0, null);  
g.dispose();