Bonjour,
Je cherche à savoir comment récupérer, si c'est possible, le contenu d'un canvas SVG, afin de pouvoir en modifier certains éléments, tout en laissant le reste intact.
Auriez-vous des idées, svp?
Bonjour,
Je cherche à savoir comment récupérer, si c'est possible, le contenu d'un canvas SVG, afin de pouvoir en modifier certains éléments, tout en laissant le reste intact.
Auriez-vous des idées, svp?
merci de préciser de quel librairie vous parler, il n'existe pas dans l'api java de base de "canevas svg"
Que je sache, de toutes façons, il n'y a pas de bibliothèque (traduction de libraries) comportant des mots séparés par des espaces...
Il s'agit donc d'un Canvas dans lequel j'ajoute du SVG.
Exemple :
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 class SvgCanvas extends Canvas implements SVGEventListener{ protected SVGImage svgImage; protected ScalableGraphics sg=ScalableGraphics.createInstance(); private static String img; public SvgCanvas(String img){ this.img=img; try{ this.svgImage=(SVGImage)SVGImage.createImage((InputStream)getClass().getResourceAsStream("/"+img+".svg"),null); } catch(Exception e){} } public void pointerReleased(int x,int y){ } public void sizeChanged(int width, int height){ } public void showNotify(){ } public void hideNotify(){ } public void keyPressed(int keyCode){ } public void keyReleased(int keyCode){ } public void pointerPressed(int x,int y){ System.out.println(img); } public void paint(Graphics g){ sg.setRenderingQuality(2); g.setColor(219,238,255); g.fillRect(0,0,getWidth(),getHeight()); sg.bindTarget(g); svgImage.setViewportWidth(getWidth()); svgImage.setViewportHeight(getHeight()); sg.render(0,0,svgImage); sg.releaseTarget(); } }
ce composant n'a pas de double buffer accessible (autrement dit pas de mémoire). Sa source de dessin est uniquement votre svg qui est manipulé dans la commande paint().
Si vous avez besoin de récupérer l'image du SVG pour, par exemple, la sauver, vous devrez dessiner sur le Graphics d'un BufferedImage.
Aïe, ça ne correspond pas à ce dont j'ai besoin...
Le but étant de faire un formulaire SVG (J2ME) et de pouvoir le modifier, en récupérer des données, etc.
Mais merci quand même.
J'le laisse en non-résolu un petit moment, au cas où quelqu'un aurait l'une ou l'autre suggestion alternative, sinon, ben, demain, je le passerai en résolu.
Petite précision, comme c'est pour un projet commercial, je ne veux pas passer par l'interface graphique SVG de Netbeans ou d'Eclipse, c'est pourquoi je cherche une façon-maison de le faire.![]()
rien ne vous empeche de mettre des composant de votre formulaire au dessus du canevas, ou de dessiner des choses supplémentaires sur le Graphics après avoir dessiné le SVG. L'important, c'est de savoir que le Graphics derrière le Canevas est directement mappé (normalement) sur l'écran, l'accès est donc à sens unique (on écrit dessus des pixels, on ne lit pas les pixels après)
Pour une application mobile, je ne pense pas qu'il soit possible d'ajouter un background graphique, j'ai pourtant fait de nombreux tests, c'est pourquoi j'ai eu l'idée de faire un faux formulaire en SVG avec lequel je switche avec des éléments d'un vrai formulaire, au "clic" sur l'un des éléments.
Si je suis dans l'erreur, n'hésitez pas à m'en faire part, hein.![]()
je connais pas trop java mobile, mais ton SVG, tu peux le dessiner sur n'importe quel Graphics, que ce soit celui de ton canevas, ou que ce soit celui de ton composant d'input que tu aurais étendu et don tu aurait surchargé la méthode paint. Ou que ce soit celui d'un image offscreen que tu réutilisera plus tard
Non, il n'est malheureusement pas possible de faire un paint() sur un input, en j2me...
Mais, en effet, je dois switcher et redessiner mon canvas à chaque fois...
Merci.![]()
Partager