Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rotation d'une image à 90°

    17 janvier 2018 à 21:15:46

    Bonsoir, 

    Je suis novice en programmation et j'aurais besoin d'aide pour faire tourner une image de 90° sens horaire après avoir appuyer sur un bouton dans une fenêtre Jframe.

    Merci pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2018 à 16:28:12

      Bonjour,

      Peux tu nous donner un peu plus d'info stp.
      Ton image est dans une imageView ?

      Si oui voila : 


              final ImageView selectedImage = new ImageView();   
              Image image1 = new Image(Main.class.getResourceAsStream("a.jpg"));
              selectedImage.setImage(image1);
              
              selectedImage.setRotate(90);
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2018 à 9:35:56

        Sinon tu peux aussi codé une fonction toute bête (vraiment) elle fait tourner à 90° 

        public Image rotate(Image image) {
        		BufferedImage buffered = (BufferedImage) image;
        		BufferedImage buffered2 = new BufferedImage(buffered.getHeight(),buffered.getWidth(),BufferedImage.TYPE_INT_RGB);
        		for(int x = 0;x < buffered.getWidth();x++) {
        			for(int y = 0;y < buffered.getHeight();y++) {
        					buffered2.setRGB(buffered.getHeight()-y-1, x, 
        							buffered.getRGB(x, y));
        				
        				
        			}
        		}
        		return buffered2;
        	}

        Pour faire tourner à -90° modifie

        buffered2.setRGB(buffered.getHeight()-y-1, x,buffered.getRGB(x, y));			

        En 

        buffered2.setRGB(y, x,buffered.getRGB(x, y));

        Ou pour faire tourner à 180° 

        Tu modifies 

        BufferedImage buffered2 = new BufferedImage(buffered.getHeight(),buffered.getWidth(),BufferedImage.TYPE_INT_RGB);

        En 

        BufferedImage buffered2 = new BufferedImage(buffered.getWidth(),buffered.getHeight(),BufferedImage.TYPE_INT_RGB);

        Et ça 

        buffered2.setRGB(buffered.getHeight()-y-1, x,buffered.getRGB(x, y));

        En

        buffered2.setRGB(x, getHeight()-y-1,buffered.getRGB(x, y));

        Voilà de rien 

        -
        Edité par Sacul360 20 janvier 2018 à 9:36:43

        • Partager sur Facebook
        • Partager sur Twitter
        "Il y a 2 choses infinies : la bêtise humaine et l'univers. Pour ce qui est de l'univers je ne suis pas sûr" Albert Einstein
          30 janvier 2018 à 21:56:36

          Bonjour j'ai réussie à faire une rotation de mon image avec ce code :

          import java.awt.*;
          import java.awt.event.*;
          
          import java.io.*;
          
          import javax.swing.*;
          import javax.swing.event.*;
          
          import java.awt.image.BufferedImage;
          import java.awt.Color;
          import javax.imageio.ImageIO;
          
          //= Debut de la classe Fenetre ============================================================================================
          
          class Fenetre  implements ActionListener // L'implementation de la fenetre est ActionListener car la fenetre doit savoir gerer l'action du bouton
          {
          	private JFrame  frame1; // Jframe correspondant au corps dela fenetre
          	private JButton button1;
          	private JLabel  labelImage;
          	private BufferedImage 	imaBuff; 
          	private JTextField JTextField_Coord_x, JTextField_Coord_y;
           	private JTextField JTextField_red, JTextField_green, JTextField_blue;
          	
          	Fenetre () // Constructeur de la classe fenetre   : remarque un constructeur est toujours public car il doit etre vu depuis l'exterieur de la classe
          	{
          		frame1 = new JFrame ("Tortues NinJava"); // Creation de la JFrame par appel du constructeur
          		frame1.setSize(500 , 600);
          		
          		DesignFenetre(); // Fonction mettant en place le comptenu de la fenetre		
          		
          		frame1.setDefaultCloseOperation(frame1.EXIT_ON_CLOSE) ; // Gestion de la fermutre de la fenetre
          		frame1.setVisible(true) ;                               // Affichage de la fenetre a l'ecran
          	}
          	
          	Image LectureImage(String Filename) // fonction de lecture d'une image dont le nomme est Filename. Cette retourne un objet de type Image
          	{     
          		Image image;
            
          		image   = null;
          		imaBuff = null;
           	
          		try 
                  	{
          			File file   = new File(Filename);  // Creation d'un objet File afin de lire le fichier dont le nom est Filename
          			imaBuff     = ImageIO.read(file);  // Le fichier file est interprete comme etant une image que l'on nomme image
          
          			image = Toolkit.getDefaultToolkit().createImage(imaBuff.getSource());
                  	} 
                 		catch (IOException e) 
          		{
          			System.out.println("Erreur de lecture :"+ e.toString() );	
          		}
          			
          		return(image);	
          	}
          	
          	private void AffichageImage() // Affichage de imaBuff dans le label image 
          	{		
          		Image image; // Construction d'un objet Image
          	
          		image = Toolkit.getDefaultToolkit().createImage(imaBuff.getSource()); // Initialisation de image en utilisant les donnee d'imabuff
           
           		image = image.getScaledInstance(200, 200, Image.SCALE_DEFAULT); // Afin que l'image ait la taille 200 pixels par 200 pixels
           
          		labelImage.setIcon(new ImageIcon(image)); // Affichage de la nouvelle image dans le label Image		
          	}	
          	
          	private void DesignFenetre()
          	{
          		Image image;
          	
          		frame1.setLayout(null);  // L'agencement (Layout) null permet un positionnement en fonction des coordonnees relative en pixel par l'utilisation de la commande setBounds
          		
          		//-- Definition du bouton button 1 ----------
          		button1 = new JButton("Je suis un bouton"); // Creation du JButton par appel du constructeur
          		
          		button1.setBounds( 100, 150, 200, 50 ); // Le bouton est place aux coordonnees 100 en abscisse et 150 en ordonnee dans le repere de la fenetre. 
          
          		frame1.add(button1);         // Placement du bouton sur la fenetre
          
          		button1.addActionListener(this); // On precise que le bouton doit etre ecoute afin de gerer les actions associees a celui-ci.  
           
          		//-- Lecture de l'image image ----------
          	
                  	image = LectureImage("monImage2.png");
          		
          		image = image.getScaledInstance(200, 200, Image.SCALE_DEFAULT); // Afin que l'image ait la taille 200 pixels par 200 pixels
          
          		
          
          	
          		//-- Definition du label labelImage ----------
          
          		labelImage = new JLabel(new ImageIcon(image));		
          
          		labelImage.setBounds( 100, 250, 200, 200 );
          		frame1.add(labelImage);	
          	}
          	
          	private void EcrireSurImage()
              	{
          		int x, y, r, g , b, code_couleur;
          		int xmax, ymax;
          		
          		Color couleur;
          		
          		String text;
          		
          		x = Integer.parseInt( JTextField_Coord_x.getText()   );
          		y = Integer.parseInt( JTextField_Coord_y.getText()   );
          
          		xmax = imaBuff.getWidth();    // largeur de l'image
          		ymax = imaBuff.getHeight();   // Hauteur de l'image
          		
          		if (x >=xmax) x=xmax-1;   // Test afin de pas demander un pixel au dela de la taille de l'image
          		if (y >=ymax) y=ymax-1;   //
          		if (x < 0   ) x=0;        //
          		if (y < 0   ) y=0;        //
          		
          		JTextField_Coord_x.setText( String.valueOf(x) ); // Recuperation des coordonnees du pixel
          		JTextField_Coord_y.setText( String.valueOf(y) );
          		
          		
          		
          		
          			r = Integer.parseInt( JTextField_red.getText()   ); // Recuperation de la couleur du pixel
          		g = Integer.parseInt( JTextField_green.getText() );
          		b = Integer.parseInt( JTextField_blue.getText()  );		
          	
          		couleur = new Color(r, g, b); // creation d'un objet Color
          		
          		imaBuff.setRGB( x,  y, couleur.getRGB()  );  // Creation du code RGB de l'objet Color
          		
          		AffichageImage();
          		
          	}
          		private void EcrireSurImage2()
          		
          		{
          		int xmax, ymax ; 
          		
          		xmax = imaBuff.getWidth();    // largeur de l'image
          		ymax = imaBuff.getHeight();   // Hauteur de l'image
          		
          		Color couleur;
          		
          		for (int y= 0; y<ymax ; y++)
          		{
          			
          			for (int x = 0; x< xmax; x++) //passer xmax fois dedans
          			{
          				// permutation des 2 pixels x,y 
          				int a = imaBuff.getRGB( x  ,y);
          				
          				int unecouleur = imaBuff.getRGB( xmax-1-y  ,x);
          				imaBuff.setRGB( x, y, unecouleur);
          				
          				imaBuff.setRGB( xmax-1-y, x, a);
          			
          			
          			};
          		};
          		AffichageImage();
          		}
          		
          		public void actionPerformed(ActionEvent evt) // Controle des actions gerees par ActionListener
              	{
          		Object source = evt.getSource();
          
          		if ( source == button1 )
          		{
          			EcrireSurImage2(); 
          			
          		}
          
          	 }
          	 
          	 
          }
          //= Fin de la classe Fenetre ============================================================================================
          
          //= Debut classe Monprogramme ===========================================================================================
          //- Classe principale -----------------------------------------------
          
          class MonProgramme2
          {
          	private static Fenetre fen;      // Declaration d'un objet Fenetre nomme fen
          
          	public static void main(String[] args) 
          	{
          		fen = new Fenetre(); // Creation de la fenetre par appel du constructeur
          	}
          }
          //========================================================================================================================
          
          
            
          

          le soucis c'est que les anciennes images ce superposent comme ceci et je ne sais pas comment faire 

          • Partager sur Facebook
          • Partager sur Twitter
            31 janvier 2018 à 9:20:36

            Il me semble que la solution soit assez simple Il me semble qu'il suffit de nettoyer, de remettre à zéros l'imageBuffer
            • Partager sur Facebook
            • Partager sur Twitter
            "Il y a 2 choses infinies : la bêtise humaine et l'univers. Pour ce qui est de l'univers je ne suis pas sûr" Albert Einstein
              31 janvier 2018 à 14:27:32

              Comment fait on cela ?

              -
              Edité par ArthurCharuel 31 janvier 2018 à 14:27:55

              • Partager sur Facebook
              • Partager sur Twitter

              Rotation d'une image à 90°

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown