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 :

Graphics2D to Image


Sujet :

2D Java

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut Graphics2D to Image
    Bonjour,

    Voila apres bien des recherches, je ne trouve pas mon bonheur ...

    Je voudrais convertir un Graphics2D en Image ... En BufferedImage plus précisément ...
    Au cas ou je m'exprime mal, ca serait peut etre récupèrer une image a partir d'un Graphics2d ...

    Enfin bref vous voyez quoi ...

    He hic c'est que depuis une Image, on peux facilement avoir le Graphics mais pas dans l'autre sens ... Aucune méthode depuis l'objet Graphics, et aucun constructeur d'Image ne prends en argument un Graphics ... grrr

    Sachant que je souhaite faire ca depuis une méthode Print() quand un objet implemente Printable, et cette méthode me donne directement le Graphics ... arf

    Le but est de faire une copie d'écran de ca qui va être imprimé (avec mise en page, num de page, etc ...)

    Sinon si vous avez autre solution, je prends ... (sachant que prendre un Robot et faire une copie d'écran ne me convient pas ...)

    Merci à vous ^^

  2. #2
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    essaie ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Graphics2D g2;
    [...]
    BufferedImage buffer = g2.getDeviceConfiguration().createCompatibleImage(width, height);

  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
    Citation Envoyé par jibbi
    essaie ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Graphics2D g2;
    [...]
    BufferedImage buffer = g2.getDeviceConfiguration().createCompatibleImage(width, height);
    Ca ne fera que créer une image vide...


    @JamesP
    Dans ton cas c'est beaucoup plus simple: il suffit d'apeler la méthode print(Graphics graphics, PageFormat pageFormat, int pageIndex) de ton printable en lui passant les graphics de ton image.

    Donc il faudra commencer par créer l'image à la bonne taille, puis d'appeler la méthode print en lui passant les graphics de l'image en params.
    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
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    J'ai testé ... J'ai que du noir ... lol ^^

    Sinon je suis DANS le print justement ...

    Je voudrais DEPUIS le print récupèrer une image pour l'afficher à l'écran comme apperçu d'impressions ...

    C'est le seul moment ou l'image est construite complètement ...

  5. #5
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Mais heu... c'est normal puisqu'un Graphics représente la surface de dessin elle-même. Il faut donc obtenir le Graphics de ton image, comme tu le dis toi-même. Généralement, pour prendre une "capture d'écran" on procède ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BufferedImage image = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_RGB); // ou  mieux, créer une "compatible image" comme le montre jibbi
    Graphics2D g2 = image.createGraphics();
    // et voilà où tout se passe
    monComposant.print(g2);
    g2.dispose();
    ImageIO.write(image, "PNG", new File("screenshot.png"));
    Bef, il suffit de passer le Graphics de l'image à la méthode print(Graphics) de ton composant.
    Romain Guy
    Android - Mon livre - Mon blog

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Oui je connaissait ca ...

    Mais j'ai un composant, un tableau, il va etre découpé dans ma méthode PRINT, je vais aussi rajouter un numéro de page, un titre, etc ...

    Pile a la fin de ca, je voudrais l'afficher à l'écran TELLE QUE L'IMAGE SERA IMPRIMEE ...

    La est le soucis ^^

    -------------------
    EDIT

    Voila ou ca se passe :

    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
     public int print( Graphics sp_g, 
                        PageFormat sp_pageformat, 
                        int sp_pageidx) 
      throws PrinterException 
      {
        Graphics2D w_g2 = (Graphics2D) sp_g;
     
        if ( ........ ) {
            // Mon code de mise en page et de découpage ...
        } else {
          BufferedImage test = w_g2.getDeviceConfiguration().createCompatibleImage( (int)sp_pageformat.getWidth(), (int)sp_pageformat.getHeight() );
          jvobj000.i_jvcde010.fr_impr.sp_set_image( test );
     
          //DEBUG
          try {
            File tt = new File("Test" + w_page + ".png");
            ImageIO.write( test, "png", tt );
          }catch(Exception e) {}
     
          return NO_SUCH_PAGE;
        }
      }

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Points : 143
    Points
    143
    Par défaut
    Ok j'ai une solution ...

    Je met le contenu du PRINT dans une méthode, et j'appelle 2 fois cette méthode ... 1 fois pour créer l'apercu, 1 fois pour imprimer la page ...

    Je passe le graphics en parametre à la méthode donc pour l'apercu :
    - MaMethode(MaBufferedImage.createGraphics());
    Pour imprimer depuis le Print:
    - MaMethode(monGraphics);

    Le soucis c'est que ca me fait faire 2 fois les calculs ...

    J'ai pensé a faire

    MaMethode(MaBufferedImage.createGraphics());
    puis dans le print
    monGraphics.drawImage(MaBufferedImage,null,0,0);

    Mais c'est tout pixellisé ... arf ... Pourtant j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    w_g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
          w_g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    une idée svp pour allèger le traitement ?

Discussions similaires

  1. [Graphics2D][formattedTextField] pour rogner une image
    Par zaboug dans le forum Graphisme
    Réponses: 5
    Dernier message: 03/09/2010, 17h08
  2. Réponses: 8
    Dernier message: 18/04/2010, 03h40
  3. Réponses: 2
    Dernier message: 25/11/2009, 00h09
  4. [Graphics2D] Rotation d'images
    Par MrEddy dans le forum 2D
    Réponses: 3
    Dernier message: 17/01/2007, 13h29
  5. Réponses: 4
    Dernier message: 06/12/2006, 10h29

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