我正在使用Netbeans平台在Java Swing中制作桌面应用程序。我想将16位灰度图像转换为RGB图像。我怎么能这样做?
答案 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_GRAY
到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();