Création BMP avec info DPI
Bonjour,
Je suis en train d'essayer de créer une image monochrome 1421x640 pixels en Java avec une résolution de 200 dpi mais je rencontre des soucis :roll:
Avec un logiciel comme GIMP, si l'on créée une nouvelle image, la spécification de la résolution est possible.
Sur base d'exemples trouvés sur le net j'utilise le bout de code posté ci dessous. L'idée consiste à aller modifier les datas du header BMP.
Code:
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
| @Test
public void testCreateBitmap() {
BufferedImage image = new BufferedImage(1421, 640, BufferedImage.TYPE_BYTE_BINARY);
saveBMP(image, 200, "c:\\temp\\newBMP.bmp");
}
public void saveBMP(BufferedImage bufferedImage, int dpi, String file)
{
try
{
// Image writer
BMPImageWriter imageWriter = (BMPImageWriter) ImageIO.getImageWritersBySuffix("bmp").next();
ImageOutputStream ios = ImageIO.createImageOutputStream(new File(file));
imageWriter.setOutput(ios);
// Compression
BMPImageWriteParam bmpParams = (BMPImageWriteParam) imageWriter.getDefaultWriteParam();
bmpParams.setCompressionMode(BMPImageWriteParam.MODE_DISABLED);
// Metadata (dpi)
IIOMetadata data = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(bufferedImage), bmpParams);
Element tree = (Element)data.getAsTree("javax_imageio_bmp_1.0");
tree.getElementsByTagName("X").item(0).setNodeValue(""+dpi);
tree.getElementsByTagName("Y").item(0).setNodeValue(""+dpi);
// Write and clean up
imageWriter.write(data, new IIOImage(bufferedImage, null, null), bmpParams);
ios.close();
imageWriter.dispose();
}
catch (Exception e)
{
e.printStackTrace();
}
} |
Lorsque j'ouvre l'image dans MSPaint, dans les propriétés de l'image créée, la résolution reste toujours affichée à 85x85...
L'un d'entre vous aurait-il quelques conseils / aide à m'apporter ?
D'avance je vous remercie.
Sébastien