Bonjour !
J'ai un problème dans mon application en java3D.
J'ai un canvas3D, duquel j'aimerais récuperer une image 2D. Pas le canvas en entier, mais uniquement un petit cadre.
Merci de m'aider si vous savez.
Laurent
Bonjour !
J'ai un problème dans mon application en java3D.
J'ai un canvas3D, duquel j'aimerais récuperer une image 2D. Pas le canvas en entier, mais uniquement un petit cadre.
Merci de m'aider si vous savez.
Laurent
J'ai essayé ça que j'ai trouvé dans la FAQ :
mais j'obtient une image blanche ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public Image getImage(Component component){ if(component==null){return null;} int width = component.getWidth(); int height = component.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); component.paintAll(g); g.dispose(); return image; }
Il y a bien 2 solution:
Faire une capture directement avec le Robot de awt, juste sur la zone que tu veux prendre.
Seconde solution, un poil plus complexe... C'est d'éffectuer un rendu OffScreen donc hors écran. Avec ça tu pourras directement effectuer un rendu dans une image de la taille que tu souhaites (selon la mémoire video dispo pour la 3D et générale pour l'image, attention au Heap size qui peut se changer mais qui par défaut a un maxi de 64M)
J'éspère que ça t'aide ... un peu tardivement certes mais bon, comme on dit, mieux vaut tard que jamais
Ouh, c'est vrai qu'on est un peu à la bourre là...
Une petite info, au cas où ça servirait... je n'utilise pas Java3D... enfin, je n'utilise plus Java3D, je suis passé à Jogl, j'espère que le phénomène est commun aux deux API.
Il faut faire attention quand tu veux récupérer ton image, il y a un décalage entre le moment où tu appelles le rafraichissement de l'image et le moment où elle est réellement rafraichie (si je ne m'abuse, il y a un thread séparé pour la gestion de l'IHM). La méthode que j'utilise est d'utiliser un booléen pour indiquer que je souhaite récupérer l'image, et je gère la récupération de l'image dans la fonction display() de mon canvas3D (via le booléen). Ainsi, tu récupères l'image quand le canvas est vraiment mis à jour, et tu ne finis pas avec l'image blanche... ou noire...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager