我对Java IO和图像的经验很少,并且在将以字节数组形式保存的航空图像转换为BufferedImage方面一直没有成功。

这是我的代码:

        int width = scaledImage.getWidth();
    int height = scaledImage.getHeight();
    DataBuffer buffer = new DataBufferByte(scaledImage.getImage(), scaledImage.getImage().length, 0);
    SampleModel sampleModel = new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE, width, height, new int[]{(byte)0xf});
    WritableRaster raster = Raster.createWritableRaster(sampleModel, buffer, null);
    ColorModel colorModel = imageManager.generateColorModel();
    BufferedImage image = new BufferedImage(colorModel, raster, false, null);


此代码大部分是从http://www.exampledepot.com/egs/java.awt.image/Mandelbrot2.html借用的。

此代码引发以下异常

java.awt.image.RasterFormatException:数据数组太小(应为122499)

数据数组的实际长度为52341。

尺寸为350像素X 350像素

最佳答案

这是杀死你的那条线:

DataBuffer buffer = new DataBufferByte(scaledImage.getImage(), scaledImage.getImage().length, 0);

您显示的示例执行width * height而不是scaledImage.getImage()。length。在您选择的模型中,每个像素需要一个字节,即350x350或122500。

07-24 09:15