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

Langage Java Discussion :

Coller d'image très long


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 5
    Par défaut Coller d'image très long
    Bonjour,

    J'ai implémenté une fonction permettant de coller une image du presse papier dans mon logiciel de tableau blanc. Le problème c'est que la récupération de cette image est très longue ( une trentaine de secondes ) . C'est précisément lorsque je fais le getContent(null).

    Quelqu'un peut il m'aider ?

    Merci !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ... 
    Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
            try{
     
                Image image = (Image)t.getTransferData(DataFlavor.imageFlavor);
     
                BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB );
     
    ...

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Citation Envoyé par fort88 Voir le message
    C'est précisément lorsque je fais le getContent(null)
    C'est précisémment là que le contenu du presse papier est récupéré. C'est normal que ca demande un peu de temps, il faut récupérer l'image. Suivant la taille de celle-ci (et peut-être son type, je ne sais pas) et la puissance de ton ordi, cela peut mettre + ou - de temps.
    Chez moi, un double coeur 3Ghz avec pas mal de mémoire, c'est quelque dizième pour une image de 500x500, et environ 5s pour une image de 1600x1200.

    Voici un exemple qui te servira à savoir s'il y a une différence en terme de performance avec ce que tu as fait. L'action de collage tourne dans un Thread pour ne pas bloquer l'appli.
    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
    91
    92
    93
    94
    95
    96
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
     
    @SuppressWarnings("serial")
    public class JClipboardImagePanel extends JPanel {
     
    	private static String MESSAGE = "[pas d'image]";
     
    	private Image image;
     
    	public static void main(String[] args) {
    		final JClipboardImagePanel panel = new JClipboardImagePanel();
    		final JButton btn = new JButton("afficher l'image du presse papier");
    		btn.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				Thread thread = new Thread(new Runnable() {
    					@Override
    					public void run() {
    						btn.setEnabled(false);
    						Image image = getClipboard();
    						panel.setImage(image);
    						btn.setEnabled(true);
    					}
    				});
    				thread.start();
    			}
    		});
     
    		JFrame f = new JFrame("Clipboard");
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel content = (JPanel) f.getContentPane();
    		content.setLayout(new BorderLayout());
    		content.add(btn, BorderLayout.NORTH);
    		content.add(new JScrollPane(panel), BorderLayout.CENTER);
    		f.pack();
    		f.setLocationRelativeTo(null);
    		f.setVisible(true);
    	}
     
    	public JClipboardImagePanel() {
    		setImage(null);
    	}
     
    	public void setImage(Image img) {
    		image = img;
    		if (image != null) {
    			setPreferredSize(new Dimension(image.getWidth(null), image.getHeight(null)));
    		} else {
    			setPreferredSize(new Dimension(300, 300));
    		}
    		revalidate();
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		g.setColor(getForeground());
    		g.drawString(MESSAGE, 15, this.getHeight() - 15);
    		if (image != null) {
    			g.drawImage(image, 0, 0, null);
    		}
    	}
     
    	public static Image getClipboard() {
    		Image image = null;
    		Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
    		try {
    			if (t != null && t.isDataFlavorSupported(DataFlavor.imageFlavor)) {
    				image = (Image) t.getTransferData(DataFlavor.imageFlavor);
    			}
    		} catch (UnsupportedFlavorException e1) {
    			e1.printStackTrace();
    		} catch (IOException e2) {
    			e2.printStackTrace();
    		} catch (IllegalStateException e) {
    			e.printStackTrace();
    		}
    		return image;
    	}
     
    }
    @+

Discussions similaires

  1. [ImageMagick] Coller deux images
    Par Todd62 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 27/02/2006, 09h08
  2. [ImageMagick] Texte -> image : très mauvaise qualité ?
    Par Yusuke dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 11/11/2005, 19h17
  3. Démarrage de windows vraiment très long
    Par krfa1 dans le forum Windows XP
    Réponses: 16
    Dernier message: 23/10/2005, 12h37
  4. delete très long
    Par slefevre01 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/10/2005, 13h16
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 22h18

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