Way*_*ney 2 java image-processing
我想将图像转换为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;
}
Run Code Online (Sandbox Code Playgroud)然后我对像素阵列做了一些操作
接下来,我将数组转换回图像.
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;
}
Run Code Online (Sandbox Code Playgroud)但我得到了一个完整的黑色图像,我确信它不是完整的黑色.我该怎么做才能得到正确的结果?
编辑 - 应用efan的解决方案后,当我将图像保存到文件时,假设(0,0)的像素值为68然后在计算同一文件中的像素值时,它有时更改为70有时为71 ..有每个像素的失真很小.但它会破坏整个图像.有什么问题吗?
我想原因图像全黑的是SampleModel对Raster是错.以下是我对您的代码所做的事情:
private SampleModel sampleModel;
public int[][] compute(File file)
{
...
sampleModel = raster.getSampleModel();
...
}
public java.awt.Image getImage(int pixels[][])
{
...
WritableRaster raster= Raster.createWritableRaster(sampleModel, new Point(0,0));
for(int i=0;i<w;i++)
{
for(int j=0;j<h;j++)
{
raster.setSample(i,j,0,pixels[i][j]);
}
}
BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_BYTE_GRAY);
image.setData(raster);
...
}
Run Code Online (Sandbox Code Playgroud)
这对我很好.我的理解是,BufferedImage.TYPE_BYTE_GRAY没有准确选择你需要的东西.不同的东西可能会更好,但我不知道这些类型与颜色/样本模型的对应程度.如果你知道你需要哪个样本模型,你可以使用它:
WritableRaster raster= Raster.createWritableRaster(new PixelInterleavedSampleModel(0, w, h, 1, 1920, new int[] {0}), new Point(0,0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16389 次 |
| 最近记录: |