我正在使用 Netbeans 平台在 Java Swing 中制作桌面应用程序。我想将 16 位灰度图像转换为 RGB 图像。我怎样才能做到这一点?
问问题
6427 次
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 回答