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 :

[Image] BufferedImage : Déplacement image


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut [Image] BufferedImage : Déplacement image
    Bonjour,

    Je travail avec un BufferedImage qui contient une partie d'une grande image. Lorsque je me déplace à droite, je supprimer X pixels du bord droit puis je déplace mon image à gauche de X pixel pour recharger la partie de droite et ainsi avoir une navigation interactive.
    Voici le bout de code réalisant ce travail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	g2.drawImage(buffer.getSubimage(tileWidthInResolution, 0, this.MEMORYWIDTH - tileWidthInResolution, 
    					  this.MEMORYHEIGHT).getScaledInstance(this.MEMORYWIDTH - tileWidthInResolution,
    					  this.MEMORYHEIGHT,0)
    					  ,0,0,  this.MEMORYWIDTH - tileWidthInResolution, this.MEMORYHEIGHT, null);
    			g2.clearRect(this.MEMORYWIDTH-tileWidthInResolution,0,tileWidthInResolution,MEMORYHEIGHT);
    Mon problème est que, le getSubImage me prend beaucoup de mémoire et comme je dois faire ca souvent, au bout d'un certain temps, j'ai un OUT_OF_MEMORY.

    Auriez vous une meilleur idée pour déplacer mon image dans mon buffered image?

    Merci

  2. #2
    Membre éprouvé
    Avatar de narkotik
    Inscrit en
    Mai 2004
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 117
    Par défaut
    au lieu d'avoir une grande image, tu la découpes en un tableau d'images ( tableau à 2 dimensions)
    ensuite tu ne fais apparaitre que les parties du tableau qui t'intéresses et les autres tu ne les charges pas en mémoire et la tu n'auras plus du tout de probleme

  3. #3
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Merci pour ton idée mais je suis sûr qu'il existe un moyen plus performant pour faire une translation d'un bufferedImage

    Si quelqu'un a une autre solution...

  4. #4
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    heu dsl rien a voir :-D mais cyber_jad ce srait pas pr cyber_jadoul qui bosserait a Mt Godinne.??

  5. #5
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    Pour répondre à ta question, si tu as une grosse BufferedImage et que tu veux n'en afficher qu'une partie (c'est ce que j'ai compris...) tu peux utiliser la méthode clipRect() de Graphics ou clip() de Graphics2D. Par exemple, dans clipRect, tu lui spécifie les coordonées X,Y du départ de ce que tu veux voir et ensuite le width et height de la partie à afficher. Plus rapide ça va être difficile je pense ;-)
    Pour illustrer:
    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
    72
    73
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
     
     
    import java.awt.event.MouseMotionAdapter;
    import java.awt.event.MouseEvent;
    /**
    * This code was generated using CloudGarden's Jigloo
    * SWT/Swing GUI Builder, which is free for non-commercial
    * use. If Jigloo is being used commercially (ie, by a corporation,
    * company or business for any purpose whatever) then you
    * should purchase a license for each developer using Jigloo.
    * Please visit www.cloudgarden.com for details.
    * Use of Jigloo implies acceptance of these licensing terms.
    * *************************************
    * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED
    * for this machine, so Jigloo or this code cannot be used legally
    * for any corporate or commercial purpose.
    * *************************************
    */
    public class NewJPanel extends javax.swing.JPanel {
     
    	/**
            * Auto-generated main method to display this 
            * JPanel inside a new JFrame.
            */
     
    	private Image img;
    	private Graphics2D g2;
    	private int width;
    	private int height;
     
    	private int x;
    	private int y;
     
    	public NewJPanel() {
    		super();
    		width=50;
    		height=50;
    		img = Toolkit.getDefaultToolkit().getImage("test.jpg");
    		initGUI();
    	}
     
    	private void initGUI() {
    		try {		
    			setPreferredSize(new Dimension(200, 200));
    			this.addMouseMotionListener(new MouseMotionAdapter() {
    				public void mouseMoved(MouseEvent evt) {
    					x=evt.getX();
    					y=evt.getY();
    					repaint();
    					//TODO add your code for this.mouseMoved
    				}
    			});
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	public void paint(Graphics g) {
    		Graphics2D g2 = (Graphics2D)g;
    		this.g2=g2;
    		super.paint(g);	
    		g2.clipRect(x,y,width,height);
    		g2.drawImage(img,0,0,this);
     
    	}
     
    }

  6. #6
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    ha non sorry, jme gourre de problème ;-p

  7. #7
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    siiiiiii c'est qui BIDI?

  8. #8
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    ça ça doit être plus ce que tu veux faire... ;-)
    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
    72
    73
     
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    public class NewJPanel extends javax.swing.JPanel {
     
    	/**
            * Auto-generated main method to display this 
            * JPanel inside a new JFrame.
            */
     
    	private Image img;	
    	private int width;
    	private int height;
     
    	private int x;
    	private int y;
     
    	public NewJPanel() {
    		super();
    		width=100;
    		height=100;
    		img = Toolkit.getDefaultToolkit().getImage("test.jpg");
    		initGUI();
    	}
     
    	private void initGUI() {
    		try {		
    			setPreferredSize(new Dimension(200, 200));
     
    			this.addMouseMotionListener(new MouseMotionAdapter() {
    				public void mouseMoved(MouseEvent evt) {
    					x = evt.getX();
    					y = evt.getY();
    					repaint();
    					//TODO add your code for this.mouseMoved
    				}
    			});
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	public void paint(Graphics g) {
    		Graphics2D g2 = (Graphics2D)g;
    		super.paint(g);	
    		g2.drawImage(img, 0, 0, width, height,x,y,x+width,y+height, null);
     
    	}
     
    }
     
    donc les params du drawImage sont dans l'ordre:
    l'image a afficher...
    la position ds le composant ou on commence a afficher en X
    la position ds le composant ou on commence a afficher en Y
    La largeur d'affichage
    la hauteur d'affichage
    la position ds la BUFFEREDIMAGE en X à partir de laquelle on veut afficher
    la position ds la BUFFEREDIMAGE en Y à partir de laquelle on veut afficher
    La largeur à afficher dans la source
    la hauteur à afficher dans la source
    pis l'imageobserver on s'en fout ;-)
     
    sinon Bidi => ton prédecesseur (enfin presque ;-p)

  9. #9
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Qui est tu fieux ?

    Ne serais-tu pas David?

  10. #10
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    uip ;-p

  11. #11
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Faudrait que tu me file ton adresse MSN fieu

    Tu peux me l'envoyer en mess privé si tu veux merciiiii

  12. #12
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    vala ;-)
    Dis qd même si ça répond a ton prob (tant que g un peu le tps... ;-)

  13. #13
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    Non en fait c'était pas vraiment ce que je voulais

  14. #14
    Membre averti
    Inscrit en
    Octobre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 29
    Par défaut
    En fait mon problème est que j'ai un bufferedImage qui est plein et je veux carrément tronquer une partie, et décaler les pixel

  15. #15
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    bah fais ta méthode toi même avec setRGB et getRGB, c'est surment moins lourd... et c pas très compliqué a faire

  16. #16
    Membre expérimenté Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Par défaut
    Entre 2 EJB ;-)


    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    import javax.imageio.ImageIO;
     
    /**
     * This code was generated using CloudGarden's Jigloo SWT/Swing GUI Builder,
     * which is free for non-commercial use. If Jigloo is being used commercially
     * (ie, by a corporation, company or business for any purpose whatever) then you
     * should purchase a license for each developer using Jigloo. Please visit
     * www.cloudgarden.com for details. Use of Jigloo implies acceptance of these
     * licensing terms. ************************************* A COMMERCIAL LICENSE
     * HAS NOT BEEN PURCHASED for this machine, so Jigloo or this code cannot be
     * used legally for any corporate or commercial purpose.
     * *************************************
     */
    public class NewJPanel extends javax.swing.JPanel {
     
    	/**
             * Auto-generated main method to display this JPanel inside a new JFrame.
             */
     
    	private Image img;
     
    	private BufferedImage bimg;
     
    	private int width;
     
    	private int height;
     
     
    	public NewJPanel() {
    		super();
     
    		//img = Toolkit.getDefaultToolkit().createImage("test.jpg");
    		//		bimg = new BufferedImage(200,200,BufferedImage.TYPE_4BYTE_ABGR);
    		try {
    			bimg = ImageIO.read(new File("test.jpg"));
    			width = bimg.getWidth();
    			height = bimg.getHeight();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		initGUI();			
    	}
     
    	public void scroll() {
    		int col;
    		int xpos,ypos;
    		for (int j = 0; j < height; j++) {
     
    			for (int i = 0; i < width; i++) {
    				if(i>=width-1) {
    					xpos=1;
    				} else {
    					xpos=i+1;
    				}
    				col = bimg.getRGB(xpos, j);
    				bimg.setRGB(i, j, col);
    			}
    		}
    		repaint();
    	}
     
    	private void initGUI() {
    		try {
    			setPreferredSize(new Dimension(bimg.getWidth(), bimg.getHeight()));
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	public void paint(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g;
    		super.paint(g);
    		g2.drawImage(bimg,0,0,null);
    	}
     
    }
    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
     
     
     
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
     
    import javax.swing.WindowConstants;
    /**
    * This code was generated using CloudGarden's Jigloo
    * SWT/Swing GUI Builder, which is free for non-commercial
    * use. If Jigloo is being used commercially (ie, by a corporation,
    * company or business for any purpose whatever) then you
    * should purchase a license for each developer using Jigloo.
    * Please visit www.cloudgarden.com for details.
    * Use of Jigloo implies acceptance of these licensing terms.
    * *************************************
    * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED
    * for this machine, so Jigloo or this code cannot be used legally
    * for any corporate or commercial purpose.
    * *************************************
    */
    public class NewJFrame extends javax.swing.JFrame {
     
    	/**
            * Auto-generated main method to display this JFrame
            */
    	NewJPanel jp = new NewJPanel();
     
     
    	public static void main(String[] args) {
    		NewJFrame inst = new NewJFrame();
     
    	}
     
    	public NewJFrame() {
    		super();		
    		initGUI();	
    		getContentPane().add(jp);
    		addKeyListener(new KeyAdapter() {
    			public void keyPressed(KeyEvent evt) {
     
    				//TODO add your code for inst.keyPressed
    			}
    		});
     
    		pack();
    		setVisible(true);	
    		for(;;) {
    			jp.scroll();
    		}
    		//getToolKit().
     
    	}
     
    	private void initGUI() {
    		try {
    			setSize(400, 300);
    			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    }

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

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. déplacement image
    Par HiT dans le forum 2D
    Réponses: 10
    Dernier message: 25/02/2009, 16h01
  3. [image]bufferedimage
    Par roche.jul dans le forum Java ME
    Réponses: 2
    Dernier message: 08/03/2006, 12h41
  4. [Image]Image et déplacements
    Par cuber dans le forum 2D
    Réponses: 4
    Dernier message: 30/06/2005, 11h58
  5. Réponses: 6
    Dernier message: 30/09/2004, 12h21

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