我想将图像转换为像素的二维数组,对其进行一些操作,然后将生成的二维数组转换回图像。但结果我总是得到一个纯黑色的图像。我无法弄清楚我哪里出错了。这是我正在做的。所有操作都需要在 8 位灰度图像上完成。
首先,我得到了二维像素数组。
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.. 有每个像素的小失真。但它会破坏整个图像。有什么解决办法吗?