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 :

Comment dessiner pixel par pixel sur un objet graphics2d contenu dans un Jpanel


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut Comment dessiner pixel par pixel sur un objet graphics2d contenu dans un Jpanel
    salut comment on peut dessier pixel par pixel avec swing sujr un graphics2d?

    MERCI

  2. #2
    Membre du Club Avatar de lebesnec
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    ba ya pas de méthode drawPixel sur Graphics2D ... c'est bizarre d'ailleurs

    je voit qu'une solution un peut crade c'est de faire un drawLine avec une longueur de ligne à 1.
    Chercher dans la Javadoc directement depuis Firefox / IE7 : http://lebesnec.free.fr/?p=8

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    on m'a suggéré d'utiliser :
    void setRGB(int x, int y, int rgb) => modification d'un pixel.
    void setRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) => modification d'une zone.

    mais ca marche pas pour des valeur de x et y superieures a 255 et j'ai pas compri !!

  4. #4
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    setRGB, c'est pour une BufferedImage, et pas pour un Graphics2D (Mais rien ne t'empêche de dessiner une BufferedImage sur un Graphics2D )

    Ce qui m'embête, c'est ton histoire de x et y pas supérieurs à 255.. Il n'y a pas de raison à cela. Tu pourrais mettre un bout de code pour voir comment tu initialise ton dessin ? Et quelle erreur ça te renvoie ?
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    voilà le code que j'utilise

    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
     
      private BufferedImage bimg;
     
     public void paint(Graphics g1) {
     
      MemoryMonitor.g = (Graphics2D) g1;
    ...
    // mon operation 
     for (i = 0 ; i < 100 ; i++)
     {
      bimg.setRGB(200 +i , 400 + i,couleur);
     }
     
    // je dessine 
    g.drawImage(bimg, 0, 0, this);

  6. #6
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    et la création de ta bufferedimage se fait avec quels paramètres?
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    la voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     Dimension d = getSize();
                   System.out.println("w...h"+w+".."+h);
     
                   if (d.width != w || d.height != h) {
                        w = d.width;
                        h = d.height;
                        bimg = (BufferedImage) createImage(w, h);

  8. #8
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    donc si je comprend bien...
    tu es sûr que :
    1 - w >=299
    2 - h >=499
    (à ce propos, si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Dimension d = getSize();
                   System.out.println("w...h"+w+".."+h);
                   
                   if (d.width != w || d.height != h) {
                        w = d.width;
                        h = d.height;
                        System.out.println("w...h"+w+".."+h);
                        bimg = (BufferedImage) createImage(w, h);
    , ça te renvoie quoi ?)
    3 - que couleur est valide
    Mais ça plante... c'est ça ?
    Quelle erreur et à quel moment ?
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    le probleme c 'est que le bloc :

    for (i = 0 ; i < 100 ; i++)
    {
    bimg.setRGB(200 +i , 400 + i,couleur);
    }

    quand je l'enleve mon aimge s'affche ...et quand je le remet rien en s'affiche : seulement mon jpanel conteneur vide!!

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    et pour repondre a l'autre question : voila les dimensions de ma fentre renvoyées
    w...h988..953

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    au fait si on considere le bloc suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (d.width != w || d.height != h) {
                        w = d.width;
                        h = d.height;
                        bimg = (BufferedImage) createImage(w, h);                  
                        big =bimg.createGraphics();
    comment une fois que j'utilise le setRGB sur bimg , faire passer cette information a big pour la dessiner? je crois que c'est ca qui emmanque !

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 850
    Points
    22 850
    Billets dans le blog
    51
    Par défaut
    Pourrais-tu nous poste le code complet de ta classe s'il-te-plait nottament la maniere dont tu dessines ton image sur l'ecran plutot que des petits bouts de part et d'autre. Et as-tu pense a appeler repaint() sur le JPanel apres avoir modifie ton image ?

    Les methodes de BufferedImage permettent de manipuler des pixels car comme leur nom l'indique elles sont bufferisee et il existe bien une representation de l'image sous forme de tableau de pixel (un Raster) qq part dans la classe. Cependant certaines de ces methodes peuvent faire perdre l'acceleration materielle (le contenu de l'image est deplace en memoire centrale pour la modif et ne revient pas en memoire video ; l'image devient et reste "software").

    La methode la plus commune (mais pas forcement la plus optimisee) pour dessiner 1 pixel dans une image quelconque (une Image par exemple) c'est de recuperer son graphics et de remplir un rectangle de taille 1. Dessiner une line peut ne pas suffire car le Stoke joue en Java2D, il faut penser a mettre sa valeur AVANT de dessiner. Cependant quelque soit la methode il faut faire attention car certains RenderingHints peuvent modifier le resultat obtenu.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. extraction d'objet pixel par pixel
    Par pacem dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 08/06/2009, 16h36
  2. Image a remplir Pixel par Pixel, Quel objet utiliser ?
    Par ZbergK dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 28/02/2007, 21h35
  3. [ImageMagick] Parcourir une image pixel par pixel
    Par kip dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/10/2005, 14h10
  4. [VB6] [Graphisme] Transfert d'image pixel par pixel
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/10/2002, 09h53

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