Java, image, redimentionnée

maudtoutcourt - 4 juin 2013 à 18:17
 maudtoutcourt - 6 juin 2013 à 13:23
Bonjour

Je suis entrain de coder une application java, ( un jeu de domino)
J'utilise donc des images.
Le nombre de dominos peut changer, afin qu'ils s'adaptent à la taille de la fenêtre, les dominos changent de taille.
Pour cela j'utilise deux fonctions:


// avec une taille en pixels (=hauteur si portrait, largeur si paysage):
// //permet de redimensionner image
public Image scaleImage(Image source, int size) {
int width = source.getWidth(null);
int height = source.getHeight(null);
double f = 0;
if (width < height) {// portrait
f = (double) height / (double) width;
width = (int) (size / f);
height = size;
} else {// paysage
f = (double) width / (double) height;
width = size;
height = (int) (size / f);
}
setVisible(true);
return scaleImage(source, width, height);
}

// permet de redimensionner image
public static Image scaleImage(Image source, int width, int height) {
BufferedImage img = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) img.getGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(source, 0, 0, width, height, null);
// g.dispose();
return img;
}




A chaque fois que je fais une action, j'utilise ces fonctions, pour changer mon images. et ensuite les ajouter dans un JLabel. ce qui ne pose pas de problème.

J'ai crée une fonction qui permet de changer d'image lorsque l'on passe sur l'image:


public void indiquerDomino(int i) {
Image image2 = null;
if (tab_dg[i] != "t") {
if (tab_dg[i] == "d") {
image2 = getToolkit().getImage("d_d1c.jpg");
image2 = scaleImage(image2, factor + 5);
setVisible(true);
} else {
image2 = getToolkit().getImage("g_g1c.jpg");
image2 = scaleImage(image2, factor + 5);
setVisible(true);
}
tabLabel[i].setIcon(new ImageIcon(image2));
}
setVisible(true);
}

public void indiquerDominoParti(int i) {
Image image2 = null;
if (tab_dg[i] != "t") {
if (tab_dg[i] == "d") {
image2 = getToolkit().getImage("d_d1.jpg");
image2 = scaleImage(image2, factor + 5);
setVisible(true);
} else {
if (tab_dg[i] == "g") {
image2 = getToolkit().getImage("g_g1.jpg");
image2 = scaleImage(image2, factor + 5);
setVisible(true);
}
}

tabLabel[i].setIcon(new ImageIcon(image2));
}
setVisible(true);

}


le problème que j'ai ici, est que la première fois que je vais passer sur mon image, j'ai une image blanche qui apparait.
et j'ai crée une fonction qui change l'image lorsque l'on clique dessus, c'est pareil,
Lorsque l'on refait ses actions il n'y a plus de problème, mais la premières que l'on fait une de ses actions, l'image devient blanche ( pour chaque image il faut le faire une fois avant que ça marche)

Je ne comprends pas du tout pourquoi?? c'est là que j'ai besoin de votre aide.


Je souhaiterais aussi pouvoir changer mes images une par une (pour faire un effet), j'ai donc voulu utiliser un timer ( j'ai essayé de nombreuses méthodes), mais le problème c'est qu'il attend que j'ai fini toute mes fonctions avant de changer les images, elles apparaissent donc toute en même temps (les méthodes utilisées marchent, c'est juste au niveau des images), au lieu de changer une par une, il n'y a donc pas l'effet recherché.
lorsque je ne redimensionné pas la taille des images, il n'y avait pas de soucie.

Si quelqu'un à une idée??????????
Merci pk

2 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
6 juin 2013 à 12:08
Pour afficher les images une par une, tu peux utiliser des SwingWorker qui engloberait les opérations de indiquerDomino et indiquerDominoParti pour les déporter vers l'EDT.
Pour l'instant, tes dessins sont réalisés dans le thread principal, ce qui bloque l'affichage et donne l'impression que les images sont toutes affichées en même temps.
SwingWorker (Java SE 6).
0
maudtoutcourt
6 juin 2013 à 13:23
Merci beaucoup!
0
Rejoignez-nous