这是另一种方法,如果您从整个图像的一维大数组开始,您可以避免 for 循环。
int width = 512;
int height = 512;
byte[][] a = new byte[width][height];
byte raw[] = new byte[width * height];
for (int i = 0; i < a.length; i++) {
System.arraycopy(a[i], 0, raw, i*width, width);
}
//Arrays.fill(raw, width*height/2, width*height, (byte)1);
byte levels[] = new byte[]{0, -1};
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_BYTE_INDEXED,
new IndexColorModel(8, 2, levels, levels, levels));
DataBuffer buffer = new DataBufferByte(raw, raw.length);
SampleModel sampleModel = new ComponentSampleModel(DataBuffer.TYPE_BYTE, width, height, 1, width * 1, new int[]{0});
Raster raster = Raster.createRaster(sampleModel, buffer, null);
image.setData(raster);
ImageIO.write(image, "png", new File("test.png"));