Bonjour,
J'ai l'image suivante (voir pj) que je souhaite manipuler en java. Pour cela je dois lire cette image et la transformer en tableau de byte.
Quand je crée directement cette image en java, voici ce que j'obtiens :
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -65, -67, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1, 0, -1, 0, 0, -1, 0, -1, -1, -1, -1, 0, 0, -82, 0, -95, 0]
Mais quand j'enregistre cette image depuis photosphop et que je la convertis en java, voici sa représentation en tableau de byte :
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 5, 0, 5, 5, 5, 5, 0, 5, 0, 0, 5, 0, 5, 5, 5, 5, 0, 0, 2, 0, 1, 0]
J'ai l'impression que photoshop fait une correspondance entre ses valeurs et les vrais valeurs, pourtant j'ai bien désactivé la compression et "l'interlace" lors de la sauvegarde.
Avez-vous une explication?
C'est une image en niveau de gris (un canal), j'enregistre donc cette image dans photoshop en 8bits.
Voici le code qui ouvre mon image et la convertit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
File fileImgChar = new File("src/test/resources/letterA.png");
BufferedImage imgInput = ImageIO.read(fileImgChar );
byte[] srcDataImg = ImageUtil.getBytesFromGreyImage(imgInput);
public static byte[] getBytesFromGreyImage(BufferedImage imgSrc) throws Exception {
int width = imgSrc.getWidth();
int height = imgSrc.getHeight();
// Get raw image data
Raster raster = imgSrc.getData();
DataBuffer buffer = raster.getDataBuffer();
int type = buffer.getDataType();
if (type != DataBuffer.TYPE_BYTE)
{
throw new Exception("Wrong image data type");
}
if (buffer.getNumBanks() != 1)
{
throw new Exception("Wrong image data format");
}
DataBufferByte byteBuffer = (DataBufferByte) buffer;
byte[] srcData = byteBuffer.getData(0);
// Sanity check image
if (width * height != srcData.length) {
throw new Exception("Unexpected image data size. Should be greyscale image");
}
// Output Image info
log.debug("converted image to byte: width: " + width + ", height: " + height + ", num bytes: " + srcData.length);
return srcData;
} |
Partager