Newsgroup: it.comp.java
Titolo: grafici con java

ciao a tutti,
sono nuovo di queste parti ...
devo fare un programmino in java per visualizzare una matrice di punti
leggendo da un file i valori
mi chiedevo ...
posso disegnare un pixel alla volta o devo per forza usare il drawline
impostando inizio e fine allo stesso valore?
ma il problema grosso è questo ....
la mia matrice è 16000 x 16000 e se un pixel equivale a un punto ci
vuole una risoluzione pazzesca .... c'è qualche trucco java per
condensare 20 punti in un pixel?
(forse la domanda è stupida .... però ci provo cmq a farla, non si sa
mai ...)
conviene usare il canvas oppure posso disegnare direttamente sul
frame?
una volta disegnata la matrice volevo implementare uno zoom ....
come si fa a gestire l'evento mouse down e up?
e per disegnare un rettangolo che segna la zona da ingrandire come
potrei fare?
grazie in anticipo
Max

 potrei fare?
Ci sono diversi trucchetti che potresti fare.
Ma credo che prima dovresti studiare bene i principi della grafica di Java.
Ci sono diverse strade per risolvere questo problema :
La migliore (per me), è creare una istantanea del grafico che devi zoommare,
e per ogni ridisegno del rettangolo zoom, dovresti ridisegnare l'istantanea.
Questa strada può sembrare più onerosa rispetto al ridisegno del grafico, ma
ti assicuro che non lo è e soprattutto ha un impatto visivo migliore.
Per disegnare il tuo grafico, ridefinisci paint(Graphics g), qui, in base ad
una variabile, stabilisci se devi aggiornare il  grafico o se devi
ridisegnare l'area per ripulirla dal rettangolo di zoom.
Ciao.


grazie della disponibilità :)
Ciao

 come faccio a prendere l'istantanea?
La classe Image ha un metodo : getGraphics() che ti restituisce un contesto
grafico (Graphics).
Il contesto grafico Graphics è quello che ti permette di disegnare.
ATTENZIONE, il metodo getGraphics() della classe Image è valido solo se
l'immagine ti viene creata da un oggetto grafico, se la carichi da file e
provi ad usare questo metodo, ti esce fuori un errore.
Tutto questo per dirti che :
//Creiamo una nuova immagine grande quanto il componente da fotografare:
    Image img = canvas.createImage(canvas.getSize().width,
canvas.getSize().heigth);
//Prendiamo il contesto grafico che useremo per fotografare l'oggetto
    Graphics g = img.getGraphics();
//Impressioniamo l'oggetto sull'immagine
    canvas.printAll(g);
Ora nella tua immagine hai la fotografia del tuo oggetto.
Ciao.

    canvas.printAll(g);>
ti chiedo allora ....
la prima volta che faccio il paint, dopo i miei calcoli e tutti i
drawline, metto [1]
poi il [2] e il [3] dove van messi ?
ti allego il mio pezzo di codice dove ridefinisco il paint del canvas 
//*************************************************************************
//*************************************************************************
public class mioCanvas extends Canvas
{			
  public void paint(Graphics g)
  {
    canva.update(g);			
  }
 
  public void update(Graphics g)
  {				
     if (disegna == true)
      {
        int i = 0, j = 0;
        for (i = 0; i < dime_finestra; i++)
          for (j = 0; j < dime_finestra; j++)
          {								
            g.setColor(new Color(ma_col[i][j], ma_col[i][j],
            ma_col[i][j]));
            g.drawLine(i, j, i, j);
         }		
 
         img_grafico = canva.createImage(dim_canva.width, 
         dim_canva.height);
          System.out.println("Disegnato l'insieme dei punti");
          disegna = false;
       }
       else
       {					
           // riproduco l'istantanea
 
            g = img_grafico.getGraphics();
            canva.printAll(g);
 
            System.out.println("Caricata l'immagine");
        };
   }
 
} // fine mioCanvas
//*************************************************************************
//*************************************************************************
grazie di tutto ...
ciao
Max

problema risolto ecco come:
public void update(Graphics g)
		{	
			if (mioCamp.num != 0)
			{				
				// disegna = true;
				if (disegna == true)
				{
					Dimension dim = getSize();
					int w = dim.width;
					int h = dim.height;
 
					img_grafico = createImage(w,
h);
					grp_grafico =
img_grafico.getGraphics();
					int i = 0, j = 0;
 
					for (i = 0; i < dime_finestra;
i++)
						for (j = 0; j <
dime_finestra; j++)
						{
grp_grafico.setColor(new Color(ma_col[i][j], ma_col[i][j],
ma_col[i][j]));
grp_grafico.drawLine(i, j, i, j);
						}		
 
					// System.out.println("i = " +
i + " --- j = " + j);
 
					System.out.println("Disegnato
l'insieme dei punti");
					disegna = false;
				}
				g.drawImage(img_grafico, 0,0, this);
				System.out.println("Caricata
l'immagine");
 
			}
grazie ciao
Max