1

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

4

2 回答 2

1

Incompl 描述的 getRGB/setRGB 方法应该可以工作。但是,如果我没记错的话,它的性能相当差(在这种情况下,这些方法做了很多不必要的工作)。BufferedImage.TYPE_USHORT_GRAY我认为绘制新图像并让Java优化从到的转换会快得多BufferedImage.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();  
于 2012-06-27T14:25:49.460 回答
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);
        }
    }
}

这不是完美的代码,当然您需要对其进行调整以适应您的特定需求,但这是制作单色图像的一种方法。

于 2012-06-27T12:47:07.207 回答