【发布时间】:2018-02-27 03:54:54
【问题描述】:
您好,我在将 4 位数据缓冲区转换为 WritableRaster 时遇到问题。 图像分辨率:1024x768 (786432)
这是我在做什么的描述。
1) 创建 4-bit BufferedImage
bit4Image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY, MY_BIT_4_COLOR_MODEL);
Graphics graphics = bit4Image.getGraphics();
graphics.drawImage(originalImage, 0, 0, null);
graphics.dispose();
//4-bit BufferedImage created. 4-bit BufferedImage is properly made cause it can be saved to hdd and looks good
2) 从 4 位的 DataBuffer 中获取字节数组
byte[] pixelData = ((DataBufferByte) bit4Image.getRaster().getDataBuffer()).getData();
// pixelData length is 393216
3) 现在我想从这个字节数组 pixelData 创建 BufferedImage
BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY, MY_BIT_4_COLOR_MODEL);
DataBufferByte buffer = new DataBufferByte(pixelData, pixelData.length);
WritableRaster raster = Raster.createInterleavedRaster(buffer, width, height, width, 1, new int[]{0}, new Point(0, 0));
dest.setData(raster);
问题是我打电话给Raster.createInterleavedRaster。例外:
java.awt.image.RasterFormatException: Data array too small (should be > 786431 )
我也试过这样的
BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY, MY_BIT_4_COLOR_MODEL);
dest.getRaster().setDataElements(0, 0, width, height, pixelData);
但是这个给了我类似的失败:java.lang.ArrayIndexOutOfBoundsException: 393216
有人可以给我一个提示或显示将这个 4 位 pixelData 设置为 WritableRaster 的正确方法吗?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
标签: java image-processing awt bufferedimage raster