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

AWT/Swing Java Discussion :

Centrer une bufferedImage


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut Centrer une bufferedImage
    Bonjour,

    Je souhaite centrer un bufferedImage dans un autre bufferedImage d'une taille plus grande.
    Est ce qu'il exite des méthodes toute faite ou je dois me tapper le "transvasage" à la main ? ....

    Autre solution, centrer une image dans un bufferedImage plus grand, ... mais ca revient au même.

    Parce qu'actuellement lorsque j'agrandi mon bufferedImage, l'image de départ reste en haut à gauche de mon bufferedImage, ce qui parait assez logique en soit.

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    à la mano, mais ce n'est pas franchement bien difficile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    BufferedImage image1 = ImageIO.read(...);
    BufferedImage image2 = ImageIO.read(...);
    Graphics  gr1 = image1.getGraphics();
    Graphics  gr2 = image2.getGraphics();
    BufferedImage Image3 = new BufferedImage(image1.getWidth, image1.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics gr3 = image3.createGraphics();
    int im2x = im1.getWidth()/2 - im2.getWidth()/2;
    int im2y = im1.getHeight()/2 - im2.getHeight()/2;
    gr3.drawImage(image1,0,0,null);
    gr3.drawImage(image2,im2x,im2y,null);
    gr3.dispose();
    Code non testé et codé sur le navigateur...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Merci pour cette réponse aussi rapide !
    Je vais tester !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Ca marche merci beaucoup, ...

    Code pour ceux que ca interesse ... L'objet prend en paramètre la buferedImage de départ, un angle de rotation, la largeur et la hauteur de l'image de départ (parce que j'utilise une slidebar pour donner l'angle).
    Il renvoie l'image avec la rotation effectué dessus, si la bufferedImage n'est pas carré, on agrandit le bufferedImage de façon à na pas perdre de pixel !

    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
    64
    65
    66
    67
    68
    69
    70
    71
     
    import java.awt.Canvas;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
     
     
    public class PanelImage extends Canvas {
    	private Image image;
    	private Image image_new;
    	private int facteur;
    	private String url;
    	private String operation;
    	private int w;
    	private int h;
    	private BufferedImage bufferedImage;
    	private BufferedImage bufferedImage2;
    	private BufferedImage bufDest;
    	private BufferedImage buf;
    	private BufferedImage g2d2;
    	private AffineTransform at;
    	private BufferedImage bImage2;
    	private BufferedImage Image3;
     
    	public PanelImage(BufferedImage bufImg, int facteur, String operation, int width, int height){
    		this.buf = bufImg;
    		this.facteur = facteur;
    		this.operation = operation;
    		this.w = width;
    		this.h = height;
     
    		if(this.operation == "rotation"){
    			//On crée d'abord un buffered image avec des pixel blancs pour ne pas en perdre lors de la rotation
    			int w = buf.getWidth(null);
    		    int h = buf.getHeight(null);
    		    int diag = (int)(Math.sqrt(w*w+h*h));
    		    bufferedImage2 = new BufferedImage(diag, diag, BufferedImage.TYPE_INT_ARGB);
    		    for (int i = 0; i < diag; i++) {
    		      for (int j = 0; j < diag; j++) {
    		      	bufferedImage2.setRGB(i, j, 0xffffffff);
    		      }
    		    }
    		    Graphics2D g2 = bufferedImage2.createGraphics();
    		    g2.drawImage(bufferedImage2, (diag-w)/2, (diag-h)/2, null);
     
    		    w = bufferedImage2.getWidth(null);
    		    h = bufferedImage2.getHeight(null);
     
    		    Image3 = new BufferedImage(bufferedImage2.getWidth(), bufferedImage2.getHeight(), BufferedImage.TYPE_INT_ARGB);
    		    Graphics2D gr3 = Image3.createGraphics();
    		    int im2x = bufferedImage2.getWidth()/2 - buf.getWidth()/2;
    		    int im2y = bufferedImage2.getHeight()/2 - buf.getHeight()/2;
    		    gr3.drawImage(bufferedImage2,0,0,null);
    		    gr3.drawImage(buf,im2x,im2y,null);
    		    gr3.dispose();
     
    		    AffineTransform transform = AffineTransform.getRotateInstance(Math.toRadians(facteur), w/2, h/2);
    		    AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
    		    BufferedImage bImage2 = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);     
    		    bufDest = op.filter(Image3, bImage2);
     
     
    		}
    	}
     
    		public BufferedImage getBufImg(){
    			return bufDest;
    		} 
    	}

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

Discussions similaires

  1. Centrer une page avec des frames
    Par Nicos77 dans le forum Langage
    Réponses: 11
    Dernier message: 09/11/2005, 16h52
  2. Centrer une page en CSS
    Par maniaco_jazz dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 11/10/2005, 16h21
  3. [JDialog] Centrer une boite de dialogue.
    Par GETah dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/01/2005, 16h44
  4. Centrer une <div> en position fixe sous IE
    Par Jorus dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 23/09/2004, 15h29
  5. Centrer une feuille sur l'ecran ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/06/2003, 14h11

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