我想将图像转换为二维像素数组,然后对其执行一些操作,然后将生成的二维数组转换回图像。但我总是得到一个纯粹的黑色图像。我无法弄清楚我错在哪里。这就是我所做的。所有的操作都需要在8位灰度图像上完成。将图像转换为二维数组,然后将图像返回到Java
首先我得到二维像素数组。
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; }
但我得到一个完整的黑色图像,我相信,这是不完全的黑色。我应该怎么做才能获得正确的结果?
EDIT - 施加efan的溶液后,当我的图像保存到文件中,假设的(0,0)是68的像素值,然后从它有时会发生变化,以70有时相同的文件计算所述像素值到71 ..每个像素都有很小的失真,但是它损坏了整个图像。有没有修复?
@丹:错误类型..现在纠正。 – 2013-02-21 16:06:14