Affichage d'image en Java

Résolu
Toto -  
 Toto -
Bonjour,
Je cherche à afficher un graphique à partir d'un tableau de double contenant les ordonnées des points. Pour ce faire j'ai écrit le code suivant en Java :

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Graphics; 

import java.awt.image.BufferedImage; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class ImagePrint extends JFrame { 
  
 private Container container = new Container(); 
 private static final long serialVersionUID = 1L; 
   
  
 public ImagePrint(){ 
  super("ImagePrint"); 
  setDefaultCloseOperation(EXIT_ON_CLOSE); 
  JPanel panel = new PrintPanel(); 
  panel.setPreferredSize(new Dimension(320, 320)); 
  container.add(panel); 
   
 } 
  
 public class PrintPanel extends JPanel { 
  private BufferedImage img; 
  private static final long serialVersionUID = 2L; 
    
   
  public PrintPanel(){ 
   super(); 
   img = new BufferedImage(320, 320, BufferedImage.TYPE_INT_ARGB); 
  } 
   
  public void printGraphic(double[] matrix) { 
   for(int i = 0; i < matrix.length; i++) 
    img.setRGB((int)(i*((double)getWidth()+0.5)/matrix.length), (int)(matrix[i]*getHeight()/getMax(matrix)), Color.green.getRGB()); 

   repaint(); 
  } 
   
  private double getMax(double[] matrix) { 
   double max = 0.0; 
    
   for(int i = 0; i<matrix.length; i++) 
    if(max < matrix[i]) 
     max = matrix[i]; 
     
   return max; 
  } 
   
  public void paint(Graphics graph) { 
   graph.drawImage(img, 0, 0, null); 
  } 
 } 
} 


Je l'appelle ensuite à l'aide de :

ImagePrint img = new ImagePrint(); 
    
ImagePrint.PrintPanel panel = img.new PrintPanel(); 
   
panel.printGraphic(monTableau); 


Le tableau n'est pas vide, la fonctionprintGraphic est bien appelé mais aucune fenêtre ne s'ouvre. Est ce que je n'ai aps compris le fonctionnement de la méthode repaint()? Ou est-ce autre chose?

Merci de votre aide.

5 réponses

  1. Toto
     
    J'ai essayé de remplacer
    repaint()

    par
    paint(img.getGraphics());

    La fonction
    graph.drawImage(img, 0, 0, null)

    me renvoie bien true, mais toujours rien ne s'affiche. Si à la place d'afficher le BufferedImage je l'enrengistre en png, le fichier image est vide.
    0
  2. danimo
     
    Salut,

    Mais quelles coordonnées contient le tableau matrix, où est-il créé ?

    Quelles types de figures veux-tu dessiner ?

    Dan
    0
  3. Toto
     
    Pour l'instant pour faire des tests, je passe simplement {1.0, 2.0, 3.0}. Les abscisses sont elles tout simplement 1, 2, 3, 4,...

    A therme j'aimerais avoir des courbes, mais dans un premier temps des simples points me conviendrais.
    0
  4. danimo
     
    Salut,

    Cette petite classe permet d'afficher une "courbe" composée de points successifs.

       import javax.swing.*;
       import java.awt.*;
    	
       public class DessinerDesPoints extends JFrame
       {
          private int x, y;
       
          private int w = 0;
          private int h = 0;
       
          private String point = ".";
       
          private static Font font10; // POUR LES POINTS
       
          public DessinerDesPoints()
          {
             super("DESSINER DES POINTS."); // titre
          
             setSize(400, 400); // dimensions frame
             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             setVisible(true);
          }
       
          public void paint(Graphics g)
          {
          //dimensions de la frame
             w = getSize().width;   // selon l'écran
             h = getSize().height;  // selon l'écran
          
             super.paint(g); 
          
          
          // COULEUR ET TAILLE DU POINT
             g.setFont(font10);
             g.setColor(Color.RED);
             
          	//sachant que w = 400 et h = 400 
          	x = -1; // pour commencer en 0 lors de la première incrémentation de x dans la bouclewhile
             y = h+1; //soit y = 401 pour commencer en 400
             boolean encore = true;
          
             while(encore)
             {
                if( (x < w) || (y > -1) )
                {
                   x++;
                   y--;
                   // affichage d'un point au coordonnées x/y
                   g.drawString(point, x, y);
                }
                else
                   break;
             }
          }
       
          public static void main(String[] args)
          {
             font10 = new Font("Arial", Font.BOLD, 10);
             new DessinerDesPoints();
          }
       }

    Cordialement,

    Dan
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Toto
     
    Merci, j'ai réussi à faire un programme qui réponde à mes besoins à partir de ton exemple.
    0