[JAVA2D] Rotation d'une image
Bonjour,
J'utilise JasperReport pour impirmer des codes barre (avec barbecue). Or j'ai besoin de faire pivoter ces codes barre de 90°. JasperReport ne savant pas faire celà, je doit développer une méthode qui s'en chargera.
J'arrive donc à générer le code barre à partir d'une méthode externe à jasperReport et à l'intégrer dans mon document. Il ne me reste plus qu'a faire pivoter ce code barre avant de l'insérer dansle document.
Mais je n'y arrive pas :( L'API barbecue me renvoie le code barre dans un objet BufferredImage. ET j'ai beau essayer de le faire pivoter avec AffineTransformOp j'ai du mal.
Voici la méthode qui devrait me génèrer un bufferredImage avec le code barre pivoté :
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 36 37 38 39
|
public class RotateBarCode {
private static net.sourceforge.barbecue.Barcode bc = null;
//private static AffineTransform tx = AffineTransform.getRotateInstance(Math.PI);
//private static AffineTransform tx = new AffineTransform(0.5, 0, 0, 0.5, 0, 0);
private static AffineTransform tx = new AffineTransform();
static{
tx.setToRotation(Math.PI/2);
}
private static AffineTransformOp transf = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
public static BufferedImage getImage(Object aText, boolean showText, boolean checkSum) {
String text = new StringBuffer().append(aText).toString();
try{
bc = BarcodeFactory.createCode39(text, checkSum);
bc.setBarHeight(37);
bc.setBarWidth(1);
bc.setDrawingText(showText);
BufferedImage bi0 = net.sourceforge.barbecue.BarcodeImageHandler.getImage(bc);
System.out.println("AffineTransform : "+tx);
System.out.println("AffineTransformOp : "+transf);
System.out.println("AV W:"+bi0.getWidth()+", H:"+bi0.getHeight());
BufferedImage bi1 = transf.filter(bi0, null);
//BufferedImage bi1 = transf.createCompatibleDestImage(bi0, null);
System.out.println("AP W:"+bi1.getWidth()+", H:"+bi1.getHeight());
return bi1;
//return net.sourceforge.barbecue.BarcodeImageHandler.getImage(bc);
}
catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
} |
Si je met une rotationde PI/2 come dans l'exemple j'ai cette erreur :
Citation:
java.lang.RuntimeException: Transformed height (0) is less than or equal to 0. at tst.RotateBarCode.getImage(RotateBarCode.java:40)
avec PI/3 j'ai une rotation mais pas de 90° et les couleur sont inversée (noir devient blanc et vice versa) :(
Pouvez-vous m'aider ?
merci