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

AWT/Swing Java Discussion :

Fond d'image blanc


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut Fond d'image blanc
    Bonjour,

    C'est certainement tout bête, mais je voudrais créer une image avec un fond blanc et je n'y arrive pas.

    Pour construire mon image, je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BufferedImage result;
    result = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    A partir de là, je trace sur l'image le contenu d'un panel et d'une JInternalFrame comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    g2d = (Graphics2D) result.createGraphics();
    panel.printAll(g2d);
     
    g2d.translate(0, panel.getSize().height);
    componentToDraw.printAll(g2d);
    Le problème c'est que le panel ne fait pas la même largeur que le composant à tracer. Du coup, au bout du panel, j'ai une bande de pixels noirs. J'aimerai que ces pixels soient blancs!

    J'ai essayé de rajouter du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    g2d.setBackground(Color.WHITE);
    g2d.setColor(Color.WHITE);
    avant le tracé du panel (juste après la création du Graphics), mais ça ne marche pas.

    Quelqu'un aurait une idée? (avant que je ne me lance dans l'essai de tous les types d'images...)
    Merci d'avance!

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Bon ben pour l'instant je remplis mon image de pixels blancs avant de peindre les composants à représenter, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       // on peint en blanc
       for (int i=0; i<width; i++) {
          for (int j=0; j<height; j++) {
             result.setRGB(i, j, 0xffffffff);
          }
       }
    Mais j'imagine qu'il doit exister un truc tout bête pour créer une image blanche à l'origine, non?

  3. #3
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    J'ai l'impression que tu mélanges un peu tout

    graphics.setColor et setBackground permettent de modifier la couleur pour les impressions futures dans le graphics.

    Il faut faire quelquechose du genre, sur le contexte graphique de ton image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    g2d.setColor(Color.WHITE);
    g2d.fillRect(0, 0, ... taille de ton image ...);
    Puis tu changes encore la couleur si tu veux dessiner quelque chose sur le fond blanc. Et ainsi de suite.

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Je viens d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g2d.clearRect(0,0,width,height);
    qui justement remplit le rectangle donné avec la backgroundColor.

    Mais je pensais qu'il y avait un moyen direct de créer une image blanche.
    C'est pas grave, problème résolu d'une autre manière

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Globalement il est plus intéressant de passer directement par la BufferedImage que par des Graphics. Pour dessiner un Rectangle sans passer par des Graphics, l'idéal serait d'utiliser le Raster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.getRaster().setPixels(0, 0, width, height, new int[]{0, 0, 0});
    Si je ne me trompe pas, c'est plus rapide.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par xavlours
    Globalement il est plus intéressant de passer directement par la BufferedImage que par des Graphics. Pour dessiner un Rectangle sans passer par des Graphics, l'idéal serait d'utiliser le Raster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result.getRaster().setPixels(0, 0, width, height, new int[]{0, 0, 0});
    Si je ne me trompe pas, c'est plus rapide.
    C'est peut-être plus rapide, mais ça plante
    java.lang.ArrayIndexOutOfBoundsException: 3
    at java.awt.image.SinglePixelPackedSampleModel.setPixels(Unknown Source)
    at java.awt.image.WritableRaster.setPixels(Unknown Source)
    at sun.awt.image.SunWritableRaster.setPixels(Unknown Source)
    Extrait de la JavaDoc :
    [FONT=Courier New]setPixels[/FONT][FONT=Courier New](int x, int y, int w, int h, int[] iArray)[/FONT]
    Sets all samples for a rectangle of pixels from an int array containing one sample per array element.
    Il faut peut-être créer un tableau contenant width*height éléments?
    Je vais tester...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. setBackground(); Probleme de fond d'image !
    Par 19cmos83 dans le forum Applets
    Réponses: 2
    Dernier message: 03/07/2007, 09h11
  2. image de fond css / image dans code html
    Par rastali dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 20/02/2007, 08h54
  3. Réponses: 6
    Dernier message: 28/02/2006, 21h21
  4. JFrame ayant pour fond une Image (centrée ou en mosaïque)
    Par mariogarcia dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 22/12/2005, 01h01
  5. Fond d'image
    Par kase74 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/11/2005, 13h47

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