Newsgroup: it.comp.java
Titolo: print screen

Qualcuno sa come generare una immagine gifo bmp o altro che riproduca lo
schermo da java, come alt+stamp, solo che diciamo java disegna una finestra
su schermo e quella finestra mi serve disegnata anche su file.
Sono bloccato con la tesi su questo punto e non so come fare...

Sono bloccato con la tesi su questo punto e non so come fare...
Addirittura? :-)
-- 
Ciao
	Fabrizio C.

 
Solo della finestra del programma java che sto utilizzando, che in 
pratica disegna un grafico con Magician (OpenGL su java)

Qualcuno sa come generare una immagine gifo bmp o altro che riproduca lo
schermo da java, come alt+stamp, solo che diciamo java disegna una finestra
su schermo e quella finestra mi serve disegnata anche su file.
 Mi serve solo la finestra del programma java che sto utilizzando, che in
pratica disegna un grafico con Magician (OpenGL su java)


pratica disegna un grafico con Magician (OpenGL su java)
Mi dispiace ma non conosco Magician: posso solo fare delle supposizioni 
e magari darti uno spunto, perň non ti garantisco che funzioni nel tuo 
caso.
Tempo addietro (piů di una volta) era stato chiesto come ottenere 
un'immagine del contenuto di un frame. Avevo fatto qualche prova e, 
grazie al codice postato anche da altri, mi era venuta fuori una cosa 
del genere:
  int height = frame.getContentPane().getHeight();
  int width = frame.getContentPane().getWidth();
  BufferedImage bi = 
this.getGraphicsConfiguration).createCompatibleImage(width, height);
  Graphics g = bi.createGraphics();
  this.paintComponent(g);
  this.paintComponents(g);
Questo stralcio di codice (dove this č un JPanel contenuto in frame) si 
trovava dentro il metodo associato alla pressione di un bottone "di 
scatto".
Una volta che hai disegnato su bi, puoi farne quello che vuoi.
Basta reperire le apposite classi (dovrebbe essere sufficiente una 
breve ricerca) e puoi salvare nel formato che vuoi (nella prova lo 
facevo in jpg, ma ovviamente non č il modo migliore) :-)
HTH
PS
Non ripostare gli stessi messaggi.
-- 
Ciao
	Fabrizio C.

   this.paintComponents(g);
Scusami ma non ho ben capito come funziona, ho provato, ma bi è una immagine
vuota da cui si crea g, paintComponents(g) mi pare che disegna sul
componente da g e non il contrario, in pratica mi appare una finestra
bianca.
Se hai il codice della classe col bottone di scatto o una prova magari gli
posso dare un'occhiata o se hai conservato le vecchie mail che mi dicevi a
riguardo posso provare a capirci qualcosa.
Ti ringrazio comunque della risposta

riguardo posso provare a capirci qualcosa.
Non sono mail: eventualmente sono *post* sul newsgroup ;-)
Come tali dovresti poterli recuperare con una ricerca su
http://groups.google.com/
Solo alcuni commenti sul codice seguente.
- Attenzione al percorso del file dove vai a salvare l'immagine.
- Ho usato il jpg per non cercarmi altre classi, ma vedrai che i 
risultati (ovviamente) non sono buoni (era solo una prova).
- Non č un bell'esempio di codice ;-)
<codice nome="SShot.java">
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import com.sun.image.codec.jpeg.*;
public class SShoot extends JPanel {
  private JFrame frame;
 
  public SShoot() {
    frame = new JFrame("Ci sono");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 200);
 
    setLayout(new BorderLayout());
    setBackground(Color.green);
 
    add(new JLabel("Verde", SwingConstants.CENTER), 
BorderLayout.CENTER);
    JButton button = new JButton("Fammi una foto");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        shot();
      }
    });
    add(button, BorderLayout.SOUTH);
    JPanel p = new JPanel();
    p.add(new JLabel("Rosso"));
    p.setBackground(Color.red);
    add(p, BorderLayout.EAST);
    add(new JTextField(10), BorderLayout.NORTH);
    frame.getContentPane().add(this);
    frame.setVisible(true);
  }
 
  private void shot() {
    int height = frame.getContentPane().getHeight();
    int width = frame.getContentPane().getWidth();
    BufferedImage bi = this.getGraphicsConfiguration
().createCompatibleImage(width, height);
    Graphics g = bi.createGraphics();
    this.paintComponent(g);
    this.paintComponents(g);
    try {
      FileOutputStream fileOutputStream = new FileOutputStream("E:
\\prova.jpg");
      JPEGImageEncoder jie = JPEGCodec.createJPEGEncoder
(fileOutputStream);
      jie.encode(bi);
      fileOutputStream.flush();
      fileOutputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    SShoot ss = new SShoot();
  }
}
</ codice>
-- 
Ciao
	Fabrizio C.

Ho risolto con java.awt.Robot c'è un metodo captureScreen!
Ho provato come mi avevi detto e funziona, ma non per il mio caso purtroppo,
era un metodo migliore.
Ciao P.

Ho risolto con java.awt.Robot c'è un metodo captureScreen!
E' vero: non ci avevo pensato.
E' una classe un po' misconosciuta (almeno da me :-)
Una nota:
se rispondi al tuo messaggio, come faccio a capire che vuoi rispondere 
a me?
Perché è questo che volevi fare, vero?
-- 
Ciao
	Fabrizio C.