Bonjour,
Voila comme le titre l'indique, je suis à la recherche d'une méthode pour réaliser un zoom d'une image venant d'une caméra.
Pour info, j'utilise dsj.
Merci d'avance
Bonjour,
Voila comme le titre l'indique, je suis à la recherche d'une méthode pour réaliser un zoom d'une image venant d'une caméra.
Pour info, j'utilise dsj.
Merci d'avance
De quel type d'image dispose tu une BufferedImage, une Image AWT (enfin dans les deux cas la façon de procéder est la même.
Il faut créer ton propre composant utilisant cette image pour faire le dessin en héritant de JComponent et en redéfinissant la méthode paintComponent, et en utilisant les graphics fournis en paramètre afin de dessiner une portion de l'image au moyen de cette version de la méthode drawImage
C'est un Component. Je l'a recupère avec la méthode :
ImgBox etant un JPanel qui me permet d'afficher l'image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 this.mv.getImageView().getImgBox().add(DSFiltergraph.asComponent());
J'avais pensé à ta méthode mais pense tu que l'image va quand même continuer à défiler en mode zoomer?
Une approche que j'ai deja utilisé et qui marche correctement. (sans perte de la vidéo ni rien)
Tu met ton composant dans un jScrollPane. Et pour zoomer tu change la taille de ton panel dans ton JSP. et tu aura un zoom.
Une idée assez simple à mettre en place et qui a un résultat satisfaisant.
Cela me parait une bonne méthode mais je n'arrive pas à la mettre en place. Surement un problème de JScrollpane.
Lorsque je fais une sélection avec la souris, j'appelle la méthode zoom() qui fait :
Elle va donc chercher mon JPanel (imgBox) qui contient mon image et le redimensionne convenablement. Seulement ensuite, l'image ne prend pas toute la place disponible dans mon JPanel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.mv.getImageView().getImgBox().setPreferredSize(new Dimension(Math.abs(Presse_X-Release_X), Math.abs(Presse_Y-Release_Y));
On dirait que mon Scrollpane ne repère pas la taille de mon JPanel.
Voici le code de ma vue contenant mon image.
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 public class imageView extends JInternalFrame { private JLabel coord; private JPanel imgBox; private JScrollPane jsPane; public imageView(mainView pMv) { super("Image", true, //resizable false, //closable false, //maximizable false);//iconifiable imgBox = new JPanel (); jsPane = new JScrollPane(); //Le label des coordonnées coord = new JLabel("Coordonnées"); coord.setVisible(false); //Le JScrollPane jsPane = new JScrollPane(imgBox); jsPane.getViewport().add(imgBox); getContentPane().setLayout(new BorderLayout()); getContentPane().add(jsPane,BorderLayout.CENTER); getContentPane().add(coord,BorderLayout.SOUTH); this.setPreferredSize(new Dimension(800, 600)); this.pack(); } }
Dans ton JScrollPane tu lui insère un JPanel dans ce panel tu met un layout de type border.
Ensuite dans le panel tu additionne ton imgBox
Et essaye de voir si tu as toujours le même soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 monPanel.add(imgBox, BorderLayout.CENTER); jsPane.getViewport().add(monPanel);
C'est bon j'ai trouvé un moyen en redimensionnant également l'image qui ressort de la caméraCa fait bien 2 semaine que je suis la dessus il était temps que je m'en sorte.
Il ne me reste plus qu'un petit soucis:
Lorsque je me sert de mon scroll, l'image dans le panel n'est pas "repeinte", ce qui fait que je suis obligé de passer la souris sur un bout de l'image pour qu'elle s'affiche correctement.
C'est mon dernier problème :'(
Même si vous avez pas une réponse pour cela je vous remercie déjà beaucoup pour l'aide que vous m'avez apporté!!![]()
Essaye de forcer le repaint avec la méthode updateUI()
Cela aura pour but de consommer tous les évènements graphique lié à ton jScrollPane.
Code : Sélectionner tout - Visualiser dans une fenêtre à part jsPane.updateUI();
J'ai mis cela dans un listener comme ceci :
Cela ne change rien. Le repaint est fait seulement lorsqu'on a atteint le bord de l'image donc le milieu de l'image ne m'est pas visible :'(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 jsPane.getViewport().addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent arg0) { jsPane.updateUI(); } });
Je n'ai pas tres bien saisie le problème.
Ton image ne s'affiche pas du tout ? Sauf quand tu passe ta souris dessus.C'est ca ?
Et ce problème n'arrive que si tu utilise le scrollBar ? ou meme quand tu fait ton zoom ?
Lorsque je démarre la caméra, l'image s'affiche normalement dans l'emplacement qui lui est réservé dans le panel et si elle est trop grande les scroll apparaissent donc tout va bien.
C'est quand je veux voir le reste de l'image, je fais glisser les scroll mais elle n'est pas mise à jour, donc je ne voit plus d'image.
humm ... Je sais que j'ai déja rencontré ce soucis, mais je ne sais plus du tout pourquoi. Vraiment désoler.
Sinon autre solution que j'utilise pour de la vidéo, vlcj qui est une librairie qui utilise vlc.
Et tu utilise la fonction setCropGeometry.
lien du projet avec des sources exemples pour t'aider à comprendre.ici
Si ca peu te dépanner. Maintenant pour revenir au soucis initial peu etre que quelqu'un pourra t'aider sur l'affichage de l'image.
je ne me rappel plus mais regarde du coter du viewport
Car la il s'agit d'un soucis d'affichage. Car sans toucher au scrollPane tu as un rendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part jScrollPane1.getViewport().updateUI();
Non tjs pas J'ai essayé de l'appliquer sur le panel, j'ai tenté les validate, repaint et autres sur tous les composant de ma fenêtre mais sans succès.
Essaie donc avec un Scrollpane AWT et non un JScrollPane.
oui mais alors la le soucis c'est que je connais pas du tous le Scrollbar de awt.
Si vous connaissez des tuto pouvant m'indiquer comment attribuer un Scrollbar à mon JPanel ça sera déjà un bon début ^^.
Je vais chercher de mon coté également.
C'est un container scrollant tout ce qu'il y a de plus standard, il s'utilise de fait comme un JScrollPane.
cf javadoc: http://download.oracle.com/javase/6/...crollPane.html
Trop trop dégouté, j'ai passé 1 semaine à essayer de résoudre un problème que vous venez de me résoudre en 2 jours.
Merci beaucoup à vous 2 et bonne continuation!
Partager