我想创建一个灰度图像,但问题是如何为像素指定值(0-255)并在读取同一图像时读取它。
BufferedImage img = new BufferedImage(width, height , BufferedImage.TYPE_BYTE_GRAY);
File file = null;
//create random image pixel by pixel
for(int yHeight = 0; yHeight < height; yHeight++){
for(int xWidth = 0; xWidth < width; xWidth++){
img.setRGB(xWidth, yHeight, rgb);//here what values to specify
//for rgb (0-255)
}
}
//write image
try{
file = new File("D:\\Output.png");
ImageIO.write(img, "png", file);
}catch(IOException e){
System.out.println("Error: " + e);
}
并且为了读取相同的图像,我如何获得相同的指定像素值。
private static void marchThroughImage(BufferedImage image) {
int w = image.getWidth();
int h = image.getHeight();
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int pixel = image.getRGB(j, i);
}
}
}
答案 0 :(得分:0)
您的问题中有两个不同的部分:
首先用Java读/写图像,你应该使用这个简单的代码来使用Java.imageio
BufferedImage image = javax.imageio.ImageIO.read(new File("path/to/the/image")) ;
boolean written = javax.imageio.ImageIO.write(image, "png", new File("where/to/write/the/image")) ;
然后,要访问/修改图像中的像素,您应该使用getSample / setSample访问栅格,或者如果您需要性能,则可以直接访问DataBuffer。在这个问题中阅读我的答案: Efficient access to image pixels in Java