IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Déplacement et redimensionnement d'image


Sujet :

2D Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Déplacement et redimensionnement d'image
    Bonjour !

    Bon alors ce que j'essaie de faire n'a rien de compliqué, enfin dans le cas général... Je charge une image dans un JPanel, je dois pouvoir la déplacer par cliquer/glisser et zoomer dessus avec la molette de la sourie. En gros du GoogleMaps mais là c'est juste sur une image représentant un plan de machine.

    Mon soucis : mon image est au format cgm, du vectoriel. Du coup j'ai importé une librairie pour gérer le format cgm.

    Jusque là j'ai réussit à déplacer l'image, même si ce déplacement n'est pas fluide (je ne sais d'ailleurs pas pourquoi, est-ce le format CGM qui est mal géré ? lorsque je remplace mon cgm par un png le déplacement est fluide)

    Quand au zoom... en fait je suis bloquée là. Je ne trouve pas le moyen de redimensionner une image au format cgm. Connaissez-vous une méthode le permettant ?


    Étant donné que ça fait déjà deux semaines que je suis là dessus, j'ai cherché également d'autre format de fichier vectoriel. J'ai trouvé EMF. J'ai récupéré là aussi une librairie pour le lire. J'ai deux solution :
    • Transformer le fichier EMF en BufferedImage: avec EMFImageLoader()
    • Transformer le EMF en SVG: avec EMF2SVG()


    J'ai testé la première solution mais je n'ai toujours pas réussit à afficher l'image dans un JPanel... La deuxième je vais commencer maintenant.


    Je viens donc vers vous pour savoir si vous avez une solution quand au redimensionnement d'image CGM, ou EMF.

    Si j'utilise des extensions de fichier peu connues, comparé à du SVG par exemple, c'est parce que les plans que l'on me donne sont générés depuis une application qui ne génère pas de SVG... Donc pas trop le choix.


    Je vous remercie d'avance. Si vous voulez voir mon code, dites moi quelles parties, que je cible car il commence à être gros...

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Petit up et surtout progression !

    Alors pour l'instant j'ai déjà réussi à faire un déplacement et un zoom super propre avec un png (oui faut commencer par du facile !), et j'ai testé avec un svg ça marche également très bien !


    Je laisse de côté pour l'instant le cgm, trop galère. En revanche je reviens sur l'EMF, on peut le convertir en SVG avec la classe EMF2SVG (enfin il me semble) ! Du coup une fois convertis j'ai plus qu'à afficher le svg !

    Mon soucis : Je n'arrive pas à utiliser EMF2SVG... cette classe ne possède que la méthode main(String[] args) qui soit disant utilise la méthode export()... mais alors là je suis pommée, j'ai essayer d'appeler moi-même export() mais bon ça doit pas être comme ça...

    Quelqu'un sait comment je peux convertir mon image emf en svg ? (en passant ou non par ce que j'ai cité au dessus)


    Merci d'avance ! o/

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ces classes ne font pas partie de la distribution standard de java. Merci de nous donner le nom de la librairie utilisée.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    la libraire que j'ai importé s'appelle FreeHEP VectorGraphics.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah tu trouveras ta réponse dans la javadoc de la classe EMF2SVG...

    La javadoc est là pour être lue de temps en temps quand même...
    Citation Envoyé par Javadoc freeHEP
    simple class that uses EMFConverter to convert emf to svg. Uses EMFConverter.export(String, String, String) with type = SVG.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Oui je l'ai déjà lu et relu plus d'une fois (bon mon anglais n'aide pas donc c'est nécessaire de relire ^^' ). Je n'arrivais pas exécuter export() qui est protected.
    J'ai pu avancer aujourd'hui, j'ai modifié la structure de mon code. Du coup j'ai créé une classe Image qui hérite de EMFConverter pour pouvoir appeler export. Mais mon problème n'est pas résolu pour autant.

    J'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try{
     
    	EMFConverter.export("SVG","./src/test.emf","./src/test.svg");
    	//EMF2SVG.export("SVG", "./src/test.emf","./src/test.svg");
    	image = ImageIO.read(new File("./src/test.svg"));
     
    }
        	catch (Exception e){
    }
    J'ai essayé également avec la ligne en commentaire. Au final mon fichier test.svg se créé là où il faut sauf que lorsque je l'insère dans un buffered image, ce dernier me renvois null. J'ai modifié le chemin de destination en essayant les valeurs :
    • ./src/test.svg
    • test.svg
    • null


    Les trois fonctionnent (création du fichier au bon endroit) mais le fichier qui en ressort est soit vide soit illisible, toujours lorsque j'interroge la valeur de la bufferedImage la contenant j'obtiens null.

    Le terminal m'affiche ces erreurs (en sachant que Images est le nom de ma classe contenant le code mis plus haut) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    at org.freehep.graphicsio.exportchooser.AbstractExportFileType.getGraphics(AbstractExportFileType.java:261)
    	at org.freehep.graphicsio.exportchooser.AbstractExportFileType.exportToFile(AbstractExportFileType.java:248)
    	at org.freehep.graphicsio.exportchooser.AbstractExportFileType.exportToFile(AbstractExportFileType.java:282)
    	at org.freehep.graphicsio.emf.EMFConverter.export(EMFConverter.java:81)
    	at Images.<init>(Images.java:21)
    Vu que les chemins spécifiés sont bons, je ne sais pas d'où cela vient...

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah, réponse simple, ImageIO ne supporte pas SVG.
    Sachant que ImageIO et les BufferedImage ne sont prévue que pour des images raster, pas des images vectorielles...
    Normal que tu aies des soucis ^^...


    Plus sérieusement, freeHep te propose déjà un composant pour l'affichage de fichiers EMF : http://java.freehep.org/vectorgraphi.../EMFPanel.html

    Ce composant gère nativement le scale, à voir pour le déplacement...

    Tu n'as pas besoin de la conversion vers SVG en fait.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    package freehep;
     
    import java.awt.BorderLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.geom.AffineTransform;
    import java.io.IOException;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
     
    import org.freehep.graphicsio.emf.EMFInputStream;
    import org.freehep.graphicsio.emf.EMFPanel;
    import org.freehep.graphicsio.emf.EMFRenderer;
     
    public class EMFTest {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
     
                @Override
                public void run() {
                    try {
                        final EMFPanel panel = new EMFPanel();
                        final EMFRenderer renderer = new EMFRenderer(new EMFInputStream(EMFTest.class.getResourceAsStream("/testEMF.emf")));
     
                        panel.setRenderer(renderer);
     
                        JButton zoomInButton = new JButton("+");
                        JButton zoomOutButton = new JButton("-");
     
                        zoomInButton.addActionListener(new ActionListener() {
     
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                panel.zoomIn();
     
                            }
                        });
     
                        zoomOutButton.addActionListener(new ActionListener() {
     
                            @Override
                            public void actionPerformed(ActionEvent arg0) {
                                panel.zoomOut();
     
                            }
                        });
                        JPanel buttonPanel = new JPanel();
                        buttonPanel.add(zoomInButton);
                        buttonPanel.add(zoomOutButton);
                        JFrame f = new JFrame();
                        f.add(panel);
                        f.add(buttonPanel,BorderLayout.NORTH);
                        f.setSize(800, 600);
                        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        f.setLocationRelativeTo(null);
                        f.setVisible(true);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
     
                }
            });
     
     
        }
     
    }
    Enfin là tu n'as pas le déplacement, mais ce ne devrait pas être trop dutr à faire, tu redéfinis la méthode paintComponent de la classe EMFPanel pour ajouter une translation sur les graphics avant de faire un appel à la méthode mère
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Ouip j'avais essayé déjà avec EMFPanel sauf que je m'y étais prise comme un pied ...

    Du coup j'ai retesté en modifiant mon code, et comme ça fonctionne pas j'ai testé le tient directement (en mettant le bon nom d'image), mais j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ATTENTION: unsupport transform mode EMFTag ModifyWorldTransform (36)
      transform: AffineTransform[[0.999999046325684, 0.001383606111631, 88492.421875], [-0.001383606111631, 0.999999046325684, 48718.38671875]]
      mode: 3
    Est-ce que je dois comprendre que mon image est trop lourde ? Ou quelque chose comme ça et que du coup il n'arrive pas à effectuer de transformation dessus ?


    Merci en tout cas pour ton aide !

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est juste que freeHep ne fournit pas de support pour le mode de transform utilisé dans ton tag ModifyWorldTransform.

    Pas une erreur en soit, c'est juste qu'il ne dessinera rien

    cf le code de la classe: http://java.freehep.org/vectorgraphi...Transform.html
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Ce qui veut dire que mon image ne sera jamais dessiné ... ça ne m'arrange pas.

    Je suppose qu'en la convertissant en svg ce sera la même histoire ?

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Vu que les mêmes classes risquent d'être appelées... J'aurais tendance à dire oui...

    Je te conseillerais de remonter un Bug auprès des auteurs de freeHep à ce sujet... Enfin leur bugtracker a l'air down.

    Sinon, si tu es capable de sortir du WMF de l'appli source, Batik est une option, cette API fournit le nécessaire pour transcoder du WMF en SVG et afficher le SVG dans un composant Swing: http://xmlgraphics.apache.org/batik/using/swing.html
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    hummm retour à la case départ ...

    Je peux avoir mon image dans les formats suivants :
    • cgm
    • emf
    • wmf
    • eps


    emf est le successeur de wmf, cgm était mal géré par Java (image trop lourde), il me reste eps, mais est-il seulement gérable en Java ?

    C'est reparti pour les recherches... j'éditerai quand j'aurais avancé

  13. #13
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Regarde ma réponse précédente.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Merci ! J'avais déjà entendu parler de Batik, j'ai suivis ton conseil.

    Mais j'ai à peu près le même soucis que lorsque je convertissais un emf en svg. Voilà le code :

    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
    38
    39
    40
     
    public class DragDemo extends JApplet {
     
        public static void main(String[] args) {
            JFrame window = new JFrame();
            window.setTitle("Drag Demo");
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            window.setContentPane(new Images());
            window.pack();
            window.setVisible(true);
        }
     
    public class Images extends JSVGCanvas{
     
    	private TranscoderOutput svg;
     
    	public Images(){
    		WMFTranscoder transcoder = new WMFTranscoder();
     
    		try {
    		String wmfFile = new File("./src/test.wmf").toURL().toString();
    		String svgFile = new String("./src/out.svg");
    			TranscoderInput wmf = new TranscoderInput(wmfFile);
    			FileOutputStream fos = new FileOutputStream(svgFile);
    			svg = new TranscoderOutput(new OutputStreamWriter(fos, "UTF-8"));
    			try {
    				transcoder.transcode(wmf, svg);
    			} catch (TranscoderException e) {
    				e.printStackTrace();
    			}
    		} catch (MalformedURLException e){
    			e.printStackTrace();
    		} catch (IOException e){
    			e.printStackTrace();
    		}
     
    		setURI(new File("./src/out.svg").toURI().toString());
     
     
    	}
    Le fichier out.svg est bien créé là où il faut mais lorsque j'essaie de l'ouvrir avec setURI ça me lève l'Exception java.lang.NullPointerException comme si le fichier généré était vide encore une fois.

    Pour info le terminal contient ça :
    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
    java.lang.NullPointerException
    	at org.apache.batik.swing.svg.AbstractJSVGComponent.setGraphicsNode(AbstractJSVGComponent.java:840)
    	at org.apache.batik.swing.svg.AbstractJSVGComponent$SVGListener.gvtBuildFailed(AbstractJSVGComponent.java:1605)
    	at org.apache.batik.swing.svg.GVTTreeBuilder$4.dispatch(GVTTreeBuilder.java:179)
    	at org.apache.batik.util.EventDispatcher.dispatchEvent(EventDispatcher.java:103)
    	at org.apache.batik.util.EventDispatcher.fireEvent(EventDispatcher.java:87)
    	at org.apache.batik.util.EventDispatcher$1.run(EventDispatcher.java:46)
    	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Une idée ? :o

  15. #15
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 164
    Points
    1 164
    Par défaut
    Bonsoir,
    Je suis moi meme en train de me pencher sur le rendu de grosses images vectorielles.

    Je ne vais pas pouvoir t'aider avec batik, je suis encore en train de lire la doc par contre je peut peut etre proposer d'autres solutions.

    Si j'ai bien suivi la conversation, tu a deja reussi a dessiner l'image, mais c'est sa manipulation qui est dificile (lente). Dependement du niveau de zoom souhaité tu peu généré un raster a partir de ton CGM.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BufferedImage bi = new BufferedImage(640, 480, BufferedImage.TYPE_3BYTE_BGR);
    Graphics2D g2d = bi.createGraphics();
    g2d.draw...
    si ta lib permet de dessiner sur un composant, tu devrai pouvoir dessiner sur g2d et donc sur la BuferredImage.

    Une autre sollution serait non pas de recuperer une image a l'ecran mais les primitives de ta figure (le CGM) sous forme de liste par exemple (liste de lignes? avec couleurs? epaisseure?)
    Une fois les données extraites dans un format que tu maitrise, tu controlera parfaitement ton affichage. Et donc plus besoin d'autre lib ou de conversion de format.

    En esperant avoir pu aider

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Merci forthx, mais je ne suis pas sûre de bien tout comprendre.

    Un raster d'image est une conversion de l'image en image bitmap c'est bien ça ? (ou déjà j'ai mal compris ?)


    Après concernant l'image CGM, c'est une image extraite d'un fichier Catia, un plan assez complexe. Je ne fais qu'afficher l'image (est-ce ça que tu appelle dessiner l'image ?) du coup je ne vois pas trop comment récupérer les primitives de cette image... Bon après jusque là j'en avais jamais entendu parler donc forcement je comprends pas tout ^^'

    En tout cas merci de ton aide !

  17. #17
    Membre éprouvé

    Homme Profil pro
    Ingénieur logiciel embarqué
    Inscrit en
    Juillet 2002
    Messages
    386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur logiciel embarqué
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2002
    Messages : 386
    Points : 1 164
    Points
    1 164
    Par défaut
    Un raster d'image est une conversion de l'image en image bitmap c'est bien ça ?
    en gros oui. Le bitmap est une image raster. (image matricielle en français).

    Je ne fais qu'afficher l'image (est-ce ça que tu appelle dessiner l'image ?)
    OUI ! pour dessiner une image avec java (API standard) tu passe toujours par un raster (matrice de pixel). dans la méthode paint(Graphics g) par exemple cette matrice c'est des pixels de ton écran.

    du coup je ne vois pas trop comment récupérer les primitives de cette image
    En fait dépendamment de la précision que tu veut, tu n'a pas besoin de les récupérer justement : si tu demande a java "d'afficher" dans une BufferedImage a la place de ton écran, et que tu lui précise de faire ça grand (tu peu très bien "afficher" ça en 4000*2000, voir plus). Tu devrai obtenir une belle image pleine de pixel que tu n'a plus qu'a redimensionner avec le code suivant par exemple (a adapter):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    paint(Graphics g){
    AffineTransform at = AffineTransform.getScaleInstance(wScale,hScale);
    		g.drawRenderedImage(bi, at);
    }
    EDIT : pour eviter que ca soit moche il faut definir l'interpollation du scaling :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    en général j'utilise du bilinéaire pour une BILINEAR et BICUBIC pour un agrandissement.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/02/2014, 20h51
  2. [VB.NET] Redimensionner une image dans un PictureBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2007, 18h24
  3. [réglé][JSP - Resin] Redimensionnement d'images ...
    Par Claude Pelletier dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 24/03/2005, 18h47
  4. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo