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 :

Pixelisation d'image lors d'une rotation


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut Pixelisation d'image lors d'une rotation
    Bonjour,
    je rencontre un problème lorsque je veux faire tourner une image.
    La rotation s'effectue correctement (bon sens etc..), mais l'image affiché est pixelisé sur les rebords. Je pense que c'est du à une mauvaise gestion de la matrice rotation dans AffineTranform, donc je voulais savoir si vous aviez des solutions (sans recoder la rotation).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void draw(Graphics g)
    {
         Graphics2D g2 = (Graphics2D) g;
         AffineTransform tfm = new AffineTransform();
         tfm.rotate(-Math.toRadians(angle), position.x+dim.width/2, position.y+dim.height/2);
         g2.setTransform(tfm);
         g2.drawImage(img, position.x, position.y, null);
    }
    Merci

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    avec g2.setTransform(tfm) ,tu a s fait une rotation de tout l'espace de dessin et donc tout objet ajoutée va subir la rotation.

    pour faire seulement la rotation d'une image ,tu peut utiliser le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void paintComponent(Graphics surface) 
    {
    BufferedImage source = ImageIO.read(new File("fichier image.extension"));
    BufferedImage image = new BufferedImage(source.getHeight(), source.getWidth(), source.getType());
    double centreDeRotation = image.getHeight()/2;
    AffineTransform pivoter = AffineTransform.getRotateInstance(Math.toRadians(90), centreDeRotation, centreDeRotation);
    int interpolation = AffineTransformOp.TYPE_BICUBIC;
    AffineTransformOp pivoterImage = new AffineTransformOp(pivoter, interpolation);
    pivoterImage.filter(source, image);
     
    surface.drawImage(image, 0, 0, null);

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut
    Merci pour la réponse, mais je ne comprend pas certaines choses. Voici mon code, img est un attribut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    private Image img = ImageIO.read(new File("images/bacterie.png"));
    ...
    BufferedImage source = (BufferedImage) img;
    BufferedImage image = new BufferedImage(source.getHeight(), source.getWidth(), source.getType());
     
    AffineTransform pivoter = AffineTransform.getRotateInstance(Math.toRadians(angle), position.x+dim.width/2, position.y+dim.height/2);
    int interpolation = AffineTransformOp.TYPE_BICUBIC;
    AffineTransformOp pivoterImage = new AffineTransformOp(pivoter, interpolation);
    pivoterImage.filter(image, image);
     
    g.drawImage(image, 0, 0, null);
    Je ne voit pas vraiment ce qu'est imageRetaillée

    Mon code précédent me donne l'erreur suivante à la ligne d'instanciation de image : java.lang.IllegalArgumentException: Unknown image type 0
    at java.awt.image.BufferedImage.<init>(Unknown Source)

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.

    Citation Envoyé par univscien Voir le message
    Je ne voit pas vraiment ce qu'est imageRetaillée
    c'est déjà corrigé.

    pour ton erreur : tu peut utiliser directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BufferedImage source = ImageIO.read(new File("fichier image.extension"));
    a la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private Image img = ImageIO.read(new File("images/bacterie.png"));
    ...
    BufferedImage source = (BufferedImage) img;

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 65
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BufferedImage source = null;
    try {
    	source = ImageIO.read(new File("images/bacterie.png"));
    } catch (IOException e) {e.printStackTrace();};
     
    BufferedImage image = new BufferedImage(source.getHeight(), source.getWidth(), source.getType());
    AffineTransform pivoter = AffineTransform.getRotateInstance(Math.toRadians(angle), position.x+dim.width/2, position.y+dim.height/2);
    int interpolation = AffineTransformOp.TYPE_BICUBIC;
    AffineTransformOp pivoterImage = new AffineTransformOp(pivoter, interpolation);
    pivoterImage.filter(source, image);
     
    g.drawImage(image, 0, 0, null);
    J'ai toujours la même erreur, je comprend vraiment pas le problème :/
    Un problème à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage image = new BufferedImage(source.getHeight(), source.getWidth(), source.getType());
    C'est pas lourd de faire un read(file()) à chaques fois ?

  6. #6
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    pour le moment , essaye avec un fichier image autre que png ,par exemple un jpg

Discussions similaires

  1. disparition de l'affichage lors d'une rotation ou zoom
    Par 3aychoucha dans le forum OpenGL
    Réponses: 2
    Dernier message: 16/02/2012, 12h40
  2. Gestion du clavier lors d'une rotation
    Par fripon76 dans le forum Android
    Réponses: 1
    Dernier message: 05/01/2012, 10h54
  3. voir des images lors d'une réponse pour un post et gestion de tableau
    Par ledisciple dans le forum Evolutions du club
    Réponses: 1
    Dernier message: 26/09/2011, 20h11
  4. Coupage d'image lors d'une rotation
    Par roulian46 dans le forum Graphisme
    Réponses: 1
    Dernier message: 19/07/2011, 13h28
  5. Réponses: 3
    Dernier message: 16/01/2009, 14h30

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