Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中创建新的灰度(BuffereImage.TYPE_BYTE_GRAY)图像?_Java_Image_Bufferedimage - Fatal编程技术网

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

如何在java中创建新的灰度(BuffereImage.TYPE_BYTE_GRAY)图像?,java,image,bufferedimage,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; yHeigh

我想创建灰度图像,但问题是如何为像素指定值(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);
             }
BufferedImage img=新的BufferedImage(宽度、高度、BufferedImage.TYPE_BYTE_GRAY);
File=null;
//逐像素创建随机图像
对于(int-yHeight=0;yHeight
对于读取相同的图像,如何获得相同的指定像素值

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);
           }
         }
      }
private static void marchThroughImage(buffereImage图像){
int w=image.getWidth();
int h=image.getHeight();
对于(int i=0;i
您的问题有两个不同的部分:

  • 首先,要用Java读/写一个图像,您应该使用Java.imageio,使用以下简单代码

    buffereImage image=javax.imageio.imageio.read(新文件(“path/to/the/image”)
    
    boolean write=javax.imageio.imageio.write(图像,“png”,新文件(“where/to/write/the/image”)

  • 然后,要访问/修改图像中的像素,应该使用getSample/setSample访问光栅,或者如果需要性能,可以直接访问DataBuffer。阅读我对这个问题的回答:


    • 您的问题有两个不同的部分:

      • 首先,要用Java读/写一个图像,您应该使用Java.imageio,使用以下简单代码

        buffereImage image=javax.imageio.imageio.read(新文件(“path/to/the/image”)
        
        boolean write=javax.imageio.imageio.write(图像,“png”,新文件(“where/to/write/the/image”)

      • 然后,要访问/修改图像中的像素,应该使用getSample/setSample访问光栅,或者如果需要性能,可以直接访问DataBuffer。阅读我对这个问题的回答:


      我没有阅读图像。我正在创造新的形象。我可以创建工作正常的新ARGB映像
      BufferedImage img=new BufferedImage(宽度、高度、BufferedImage.BufferedImage.TYPE_‌​‌​‌​‌​国际ARGB);File=null;对于(int y=0;yimg.setRGB(x,y,pixel);
      这里是如何计算像素值的谢谢我用下面的代码设置了像素值:
      buffereImage img=new buffereImage(宽度、高度、buffereImage.TYPE_BYTE_GRAY);BYTE[]buffer=((DataBufferByte)img.getRaster().getDataBuffer()).getData();‌​‌​对于(byte b:buffer){buffer[counter]=(byte)pixel;counter++}
      但它会极大地增加图像大小。是否有其他方法可以逐像素创建灰度图像,并在不增加图像大小的情况下手动为每个像素设置像素值Type_INT_ARGB使用1 INT来编码图像,因此4乘以1字节(每个通道1字节).TYPE_BYTE_GRAY使用单个字节,因此只能从0到255进行编码。要填充TYPE_BYTE_GRAY,请使用DataBuffer或setSample,但不要使用setRGB(速度慢得多)。此外,TYPE_BYTE_GRAY比TYPE_INT_ARGB小得多。我没有读取图像。我正在创建新图像。我可以创建工作正常的新ARGB图像
      BufferedImage img=new BufferedImage(宽度、高度、BufferedImage.BufferedImage.TYPE_‌​‌​‌​‌​INT_ARGB);File File=null;for(INT y=0;yimg.setRGB(x,y,pixel);
      这里是如何计算像素值的谢谢我用下面的代码设置了像素值:
      buffereImage img=new buffereImage(宽度、高度、buffereImage.TYPE_BYTE_GRAY);BYTE[]buffer=((DataBufferByte)img.getRaster().getDataBuffer()).getData();‌​‌​对于(byte b:buffer){buffer[counter]=(byte)pixel;counter++}
      但它会极大地增加图像大小。是否有其他方法可以逐像素创建灰度图像,并在不增加图像大小的情况下手动为每个像素设置像素值Type_INT_ARGB使用1 INT来编码图像,因此4乘以1字节(每个通道1字节).TYPE_BYTE_GRAY使用单个字节,因此编码范围仅为0到255。要填充TYPE_BYTE_GRAY,请使用DataBuffer或setSample,但不要使用setRGB(速度慢得多)。此外,TYPE_BYTE_GRAY比TYPE_INT_ARGB小得多。