Hallo ich habe ein Problem mit meinen 4-Bit-Datenpuffer zu WritableRaster konvertieren. Bildauflösung: 1024x768 (786432)BufferedImage von 4-Bit-Datenpuffern
Hier ist die Beschreibung, was ich tue.
1) Erstellen 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) Get Byte-Array von Databuffer von 4-Bit-
byte[] pixelData = ((DataBufferByte) bit4Image.getRaster().getDataBuffer()).getData();
// pixelData length is 393216
3) Jetzt habe ich BufferedImage aus diesem Byte-Array Pixeldata
erstellen möchtenBufferedImage 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);
Problem ist, wenn ich Raster.createInterleavedRaster
anrufen. Ausnahme: java.awt.image.RasterFormatException: Data array too small (should be > 786431)
Ich habe auch versucht, so etwas wie diese
BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY, MY_BIT_4_COLOR_MODEL);
dest.getRaster().setDataElements(0, 0, width, height, pixelData);
Aber dies gibt mir ähnlich failure:
java.lang.ArrayIndexOutOfBoundsException: 393216
Könnte jemand mir einen Tip geben oder zeigt die richtigen Wie setze ich diese 4-Bit pixelData auf WriteableRaster?
Für eine bessere Hilfe früher, Posten [MCVE] oder [Kurz, Self Contained, Korrekt Beispiel] (http://www.sscce.org/). –