如何在java中创建一个新的灰度(BufferedImage.TYPE_BYTE_GRAY)图像?

时间:2017-10-22 18:16:46

标签: java image bufferedimage

我想创建一个灰度图像,但问题是如何为像素指定值(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);
           }
         }
      }

1 个答案:

答案 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