Bonjour J'ai un problème avec la conversion de mon tampon de données 4 bits en WritableRaster. Résolution d'image: 1024x768 (786432)BufferedImage à partir du tampon de données 4 bits
Voici la description de ce que je fais.
1) Créer 4 bits 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) Obtenir tableau d'octets de DataBuffer de 4 bits
byte[] pixelData = ((DataBufferByte) bit4Image.getRaster().getDataBuffer()).getData();
// pixelData length is 393216
3) Maintenant, je veux créer BufferedImage à partir de ce tableau d'octets pixelData
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);
Le problème est lorsque j'appelle Raster.createInterleavedRaster
. Exception: java.awt.image.RasterFormatException: Data array too small (should be > 786431)
J'ai aussi essayé quelque chose comme ça
BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_BINARY, MY_BIT_4_COLOR_MODEL);
dest.getRaster().setDataElements(0, 0, width, height, pixelData);
Mais celui-ci me donne l'échec similaire:
java.lang.ArrayIndexOutOfBoundsException: 393216
Quelqu'un pourrait-il me donner un indice ou montrer le bon façon de définir cette pixelData 4 bits à WritableRaster?
Pour une meilleure aide plus tôt, un poster [MCVE] ou [Short, autoportantes correcte Exemple] (http://www.sscce.org/). –