画像をピクセルの2D配列に変換し、いくつかの操作を行ってから、結果の2D配列を画像に変換し直したいと思います。しかし、結果として私は常に真っ黒な画像を取得しています。どこが悪いのかわからない。これが私がしていることです.8ビットのグレースケール画像ですべての操作を行う必要があります。
まず、ピクセルの2D配列を取得します。
public int[][] compute(File file) { try { BufferedImage img= ImageIO.read(file); Raster raster=img.getData(); int w=raster.getWidth(),h=raster.getHeight(); int pixels[][]=new int[w][h]; for (int x=0;x<w;x++) { for(int y=0;y<h;y++) { pixels[x][y]=raster.getSample(x,y,0); } } return pixels; } catch (Exception e) { e.printStackTrace(); } return null; }
次に、ピクセル配列に対していくつかの操作を行います
次に、配列を画像に変換し直します。
public java.awt.Image getImage(int pixels[][]) { int w=pixels.length; int h=pixels[0].length; BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_BYTE_GRAY); WritableRaster raster=(WritableRaster)image.getData(); for(int i=0;i<w;i++) { for(int j=0;j<h;j++) { raster.setSample(i,j,0,pixels[i][j]); } } File output=new File("check.jpg"); try { ImageIO.write(image,"jpg",output); } catch (Exception e) { e.printStackTrace(); } return image; }
しかし、私は完全な黒の画像を取得し、それは完全な黒ではないと確信しています。正しい結果を得るにはどうすればよいですか?
編集-efanのソリューションを適用した後、画像をファイルに保存するときに、(0,0)のピクセル値が68であると仮定すると、同じファイルからピクセル値を計算すると、70から71に変わることがあります。各ピクセルに小さな歪みがありますが、画像全体が損なわれます。修正はありますか?