Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

composant swing avec image modifiable

3 réponses
Avatar
batyann811
Bonjour à tous,

J'ai un programme qui réalise un calcul assez long. A partir du
résultat de ce calcul je veux génerer une image. La conversion calcul
vers image pouvant etre elle aussi assez longue je ne veux pas la mettre
dans la méthode paintComponent() d'un JPanel donc il me faudrait un
composant qui puisse mémoriser une image sur laquelle je puisse
dessiner. Est-ce que ça existe ou est que je dois le créer moi même (à
partir d'un JPanel et d'une BufferedImage par exemple) ?

Merci.

3 réponses

Avatar
Olivier Demaine
"batyann811" a écrit dans le message news:
bmloql$iap$
Bonjour à tous,

J'ai un programme qui réalise un calcul assez long. A partir du
résultat de ce calcul je veux génerer une image. La conversion calcul
vers image pouvant etre elle aussi assez longue je ne veux pas la mettre
dans la méthode paintComponent() d'un JPanel donc il me faudrait un
composant qui puisse mémoriser une image sur laquelle je puisse
dessiner. Est-ce que ça existe ou est que je dois le créer moi même (à
partir d'un JPanel et d'une BufferedImage par exemple) ?

Merci.



A mon avis le mieux est de dessiner dans une BufferedImage qui est elle
affichée dans le paintComponent.

Avatar
batyann811
Olivier Demaine wrote:


A mon avis le mieux est de dessiner dans une BufferedImage qui est elle
affichée dans le paintComponent.




Merci, c'est ce que je viens de faire et ça marche.

Ce que je ne comprends pas c'est que si je fais ça à partir d'un
JComponent ça va trés bien et si je le fais à partir d'un JPanel j'ai
plein de probleme d'affichage ??? Si quelqu'un pouvait m'expliquer
pourquoi... Je vous mets mon code :

public class ImagePanel extends javax.swing.JComponent {
// Avec JPanel -> Marche pô !

private BufferedImage image;

public ImagePanel() {
}

public ImagePanel(BufferedImage newImage) {
setImage(newImage);
}

public void setImage(BufferedImage newImage) {
image = newImage;
}

protected void paintComponent(java.awt.Graphics g) {
super.paintComponent(g);

if(image != null) {
int x = getWidth() - image.getWidth();
int y = getHeight() - image.getHeight();

g.drawImage(image, x/2, y/2, this);
}
}

public Graphics getGraphics() {
return image.getGraphics();
}
}

Avatar
TestMan
Si le traitement prend bcp de temps, deux solutions,
Soit tu veux afficher le resultat au fur et à mesure alors tu devrais
regarder aux ImageObserver, c'est exactement leur but, fournir une
synchronisation entre la fin du calcul et l'affichage de l'image. Plutôt
puissant !

http://java.sun.com/j2se/1.3/docs/api/java/awt/image/class-use/ImageObserver.html

Soit tu veux aficher tout immédiatement alors ton raster appliqué sur
un ImageIcon/BufferedImage s'affichera facilement dans un JLabel. Que
du bonheur ! Attention toute fois à la mémoire utilise pour de grandes
images.

La derniere solution, reste plus classique : tu sauvegarde ton résultat
sur disque et tu l'affiche que quand le processus est finit. simple et
efficace, et limite la mémoire utilisée en cas de sous-échantillonage de
l'affichage par exemple.

@+

TM

batyann811 wrote:

Bonjour à tous,

J'ai un programme qui réalise un calcul assez long. A partir du
résultat de ce calcul je veux génerer une image. La conversion calcul
vers image pouvant etre elle aussi assez longue je ne veux pas la mettre
dans la méthode paintComponent() d'un JPanel donc il me faudrait un
composant qui puisse mémoriser une image sur laquelle je puisse
dessiner. Est-ce que ça existe ou est que je dois le créer moi même (à
partir d'un JPanel et d'une BufferedImage par exemple) ?

Merci.