我对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。