我需要对图像进行一些操作,并且我想以特定颜色显示图像的特定部分。但是,在某些图像上,颜色显示为灰色。
例如,如果我写:
BufferedImage baseImage = javax.imageio.ImageIO.read(new File(fileName));
System.out.println(baseImage.getType());
System.out.println(baseImage.getRGB(0, 0));
baseImage.setRGB(0, 0, Color.BLUE.getRGB());
System.out.println(baseImage.getRGB(0, 0));
我的文件是红色的单个像素。输出是:
13
-65536
-16777216
如果我保存图像,我可以看到一个黑色像素。
我在上一个示例中尝试了一张类型为 5 而不是 13 的月亮图像,效果很好。
我做错了什么吗?
最佳答案
正如您自己发现的那样,缓冲的图像可以是不同的类型:http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html这取决于读取的文件。
如果您要求缓冲的图像是某种类型,则需要手动创建图像并将加载的图像绘制到其中。
例如:
BufferedImage loadedImage = ImageIO.read(...);
BufferedImage rgbImage = new BufferedImage(loadedImage.getWidth(), loadedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
rgbImage.getGraphics().drawImage(loadedImage, 0, 0, null);
关于Java BufferedImage.setRGB 给出类型 13 图像的灰度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665302/