Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1248 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] AffineTransformOp qui zap des données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] AffineTransformOp qui zap des données

n°621685
Predicator
Posté le 26-01-2004 à 10:36:50  profilanswer
 

Salut,
 
suite à mon problème avec une rotation d'image, j'ai compris comment fonctionnait l'opération de rotation, et pourquoi ça ne marchait pas... Au lieu de prendre l'image complète, il ne prend qu'une partie des données. l'image suivante explique mieux que les mots :
 
Ce mode de fonctionnement est un mode de fonctionnement normal. Les données rotationnées ajoutent du blanc autour de l'image, mais tout est prix en compte.
 
http://predicator.free.fr/images/Rotation01.jpg
 
Et voilà comment fonctionne l'opérateur de rotation de Java. Il fait pivoter l'image autour du point (0,0), ce qui ne serait pas gênant si ce même opérateur prenait en compte les données à gauche de ce point. Voilà l'image qu'il recrée :
 
http://predicator.free.fr/images/Rotation02.jpg
 
Je comprend maintenant pourquoi il me dit que la largeur est de 0 pour un angle de 90°...
Vous savez comment contrer ce mode de fonctionnement ? Ca me parait vraiment louche qu'un tel opérateur fassent de telles erreurs... Voilà le code qui génère l'image :
 

Code :
  1. int angle = 20; //angle en degrés
  2. double rad = Math.toRadians(angle); //Angle en radians
  3. AffineTransform rot = AffineTransform.getRotateInstance(rad);
  4. AffineTransformOp rotOp = new AffineTransformOp(rot, AffineTransformOp.TYPE_BILINEAR);
  5. BufferedImage res = rotOp.filter(image,null);


 
Voilà la taille de l'image originale :
Taille de l'image : 2113,3149
Voilà la taille de l'image pivotée, en toute logique :
Nouvelle Taille théorique : 3063,3682
Voilà la taille de l'image telle que la conçoit Java :
Nouvelle Taille : 1986,3682
 
plus de 1000 pixels perdus en largeur...
 
Vous avez une idée de comment corriger ça ? merci...


Message édité par Predicator le 26-01-2004 à 11:06:53
mood
Publicité
Posté le 26-01-2004 à 10:36:50  profilanswer
 

n°621716
Predicator
Posté le 26-01-2004 à 11:06:37  profilanswer
 

C'est résolu. Voilà la méthode :
 

Code :
  1. int newWidth = Math.abs((int) (image.getWidth() * Math.cos(rad) + image.getHeight() * Math.sin(rad)) + 1);
  2. int newHeight = Math.abs((int) (image.getHeight() * Math.cos(rad) + image.getWidth() * Math.sin(rad)) + 1);
  3. AffineTransform at = AffineTransform.getTranslateInstance((newWidth-image.getWidth())/2,(newHeight-image.getHeight())/2);
  4. at.rotate(rad, image.getWidth()/2, image.getHeight()/2);
  5. AffineTransformOp rotOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
  6. BufferedImage res = rotOp.filter(image,null);


 
heureusement que j'ai trouvé, vous semblez de pas aimer mes questions... trop compliquées ? :lol:


Message édité par Predicator le 26-01-2004 à 11:07:17
n°1743627
gnomish
P'tit mais niveau 9
Posté le 09-06-2008 à 18:59:51  profilanswer
 

C'est exactement ce que je cherchais, après des heures passées à bricoler avec ces satanées rotations  :o  
Mais j'avais juste besoin de tourner une image de 90°, voici ce que ça donne (en JDK 1.6):
 
        newWidth=image.getHeight(); newHeight = image.getWidth();
        AffineTransform at = AffineTransform.getTranslateInstance((newWidth-image.getWidth())/2, (newHeight-image.getHeight())/2);
        at.concatenate( AffineTransform.getQuadrantRotateInstance(1, image.getWidth()/2, image.getHeight()/2) );
        AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
        BufferedImage rotationImage = new BufferedImage(newWidth, newHeight, image.getType());
 
C'est propre et rapide.
 
Un grand merci, cet exemple sera utile à tous ceux qui veulent appliquer une rotation à une BufferedImage


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] AffineTransformOp qui zap des données

 

Sujets relatifs
Type de données indéfiniStocker une structure de données...
[RESOLU] Insertion d'une page php dans une page jsp[DELPHI] Requete SQL ? [RESOLU]
HTML / base de donnéesBase de données <-> XML
[C#] [résolu] Comment afficher une image en plein écran ?[DELPHI] TRanférer des données d'une BD à une autre !
Enregistrer des données dans un fichier texte ?Tableau de données
Plus de sujets relatifs à : [RESOLU] AffineTransformOp qui zap des données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR