IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

[JAVA2D] Rotation d'une image


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    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

  2. #2
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Voici une classe que vous pouvez exécuter pour mieux voir le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package tst;
     
    import java.awt.image.*;
    import java.awt.geom.*;
    import java.awt.*;
    import net.sourceforge.barbecue.*;
    import javax.swing.*;
     
    public class RotateBarCode {
     
    	private static net.sourceforge.barbecue.Barcode bc = null;
    	public static BufferedImage getBareCode(Object aText, boolean showText, boolean checkSum) throws Exception {
    			String text = new StringBuffer().append(aText).toString();
    			bc = BarcodeFactory.createCode39(text, checkSum);
    			bc.setBarHeight(37);
    			bc.setBarWidth(1);
     
    			bc.setDrawingText(showText);
    			return net.sourceforge.barbecue.BarcodeImageHandler.getImage(bc);
    	}
     
    	public static BufferedImage rotate(BufferedImage bi, float angledeg){
    		double radians = Math.toRadians(angledeg);
     
    		AffineTransform tx = AffineTransform.getRotateInstance(radians);
    		AffineTransformOp transf = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
     
    		BufferedImage b10 = transf.createCompatibleDestImage(bi, bi.getColorModel());
    		BufferedImage bi1 = transf.filter(bi, b10);
     
    		return bi1;
     
    	}
     
    	public static void main(String args[]){
    		try{
    			System.out.println("ANGLE : "+args[0]);
    			float ang = Float.parseFloat(args[0]);
     
     
    			BufferedImage bi = getBareCode("123456789", true, false);
     
    			bi = rotate(bi, ang);
     
    			JDialog jd = new JDialog();
    			ImageIcon ic = new ImageIcon(bi);
    			JLabel jl = new JLabel(ic);
    			jd.getContentPane().add(jl);
     
    			jd.setSize(300, 200);
     
    			jd.show();
    		}
    		catch(Exception e){
    			System.err.println("Erreur  : "+e);
    			e.printStackTrace(System.err);
    		}
     
     
    	}
     
     
    }
    Il faut le jar barbecue-1.1.jar dans son CLASSPATH.
    Par exemple :
    java -cp ./barbecue-1.1.jar:. tst.RotateBarCode -10
    affiche un code barre avec une rotation de 10°

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Eh ben, on pourra dire que je suis du genre acharné

    Après avoir retourné le problème dans tous les sens, j'ai enfin trouvé la solution. Bon je ne m'y connais pas vraiment en manipulation d'images, c'était juste par curiosité

    Le problème vient tout simplement au type de rotation que tu dois demander. Il faut demander une rotation ... autour du point central

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BufferedImage bi;
    AffineTransform tx = AffineTransform.getRotateInstance(radians, bi.getWidth()/2, bi.getHeight()/2);

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Vi car sinon la rotation s'effectue autour de (0, 0). D'ou l'erreur avec un angle de PI/2.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Merci pour votre aide

    Cependant j'ai encore un problème
    Les dimensions de l'image change avec la rotation. Comment faire pour avoir l'image dans son intégralité après la rotation, et si possible tronquer les zones non utilisée de l'image ?

    merci

    Voici l'image original :
    et l'image avec un rotation de 90° :
    Comment se fait-il qe l'image après la rotation soit presqu'un carré alors qu l'image d'origine est un rectangle ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    J'avais testé sur le deuxième code que tu as fourni, je n'avais aucun problème lors de la rotation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation d'une image 2D
    Par FidoDido® dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 29/06/2011, 11h55
  2. Rotation d'une image.
    Par poly128 dans le forum Delphi
    Réponses: 4
    Dernier message: 15/05/2006, 12h26
  3. rotation d'une image
    Par KHEOPS1982 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/12/2005, 17h21
  4. Rotation d'une image TIFF
    Par Tub-95 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/10/2005, 20h56
  5. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo