Pagina 1 di 1

[java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 0:53
da submax82
ho un problema con un oggetto MemoryImageSource che viene aggiornato da un Timer ogni 33msec richiamando la newPixels, questo provoca un fastidioso sfarfallio...

ho letto in giro di "double buffer", oggetti VolatileImage con accellerazione 2d ecc...

nessuno mi spiega meglio, magari facendo esempi?

grazie :thumbright:

Re: MemoryImageSource double buffering

Inviato: ven feb 12, 2010 10:34
da 414N
Ma di quale linguaggio stai parlando?

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 10:59
da submax82
java scusate! l'ho aggiunto nel titolo.

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 13:14
da submax82
ho provato a implementare il double buffer ma non cambia nulla!!! :evil: :evil: :evil:

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 15:21
da m0rdr3d
Hai provato ad implementare in che senso?
Hai scritto tu il codice o hai usato i metodi della libreria java per farlo?

Hai visto questo? Spero ti possa fornire qualche indicazione in più sull'argomento.

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 15:55
da FireEater
Non ho mai fatto grafica in Java, ma di solito il flickering si elimina utilizzando il metodo update su un oggetto graphics.

Anzi, ci dovrebbe essere una callback paint che richiama il metodo update quando necessario.
Nel metodo update si deve ridisegnare il graphics con qualcosa tipo g.drawImage(....).

Lo so, sembra un discorso campato per aria, ma spero comunque di esserti d'aiuto.

FireEater

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 17:00
da submax82
ho usato proprio la tecnica con la drawImage però non funge, più tardi mi spiego meglio :D

Re: [java] MemoryImageSource double buffering

Inviato: ven feb 12, 2010 22:38
da submax82
il codice è questo

Codice: Seleziona tutto

class MemoryImagePanel extends JPanel {
       private Image img;
       private MemoryImageSource mis;
       private int w,h;

       public MemoryImagePanel(int w, int h, int[] pix, int off, int scan) {
          this.w =w;
          this.h = h;
          setPreferredSize(new Dimension(w,h));
          DirectColorModel dcm=new DirectColorModel(24, 0x00FF0000, 0x0000FF00, 0x000000FF);
          mis=new MemoryImageSource(w,h,dcm,pix,off,scan);
          mis.setAnimated(true);
          mis.setFullBufferUpdates(true);
          img=createImage(mis);
       }
       
        // Overwrite imageUpdate
       public boolean imageUpdate(Image image, int i1, int j1, int k, int i2, int j2) {
          return true;
       }

       /** Draw the image on the panel. **/
       public void paintComponent (Graphics g) {
          mis.newPixels(0, 0, w, h);
          g.drawImage(img, 0, 0, this);
       }
    }


MemoryImagePanel di usa analogamente a MemoryImageSource, e riceve in ingresso un vettore che rapppresenta i pixel dell'immagine che continua a cambiare

forse non ho capito il double buffering?

Re: [java] MemoryImageSource double buffering

Inviato: dom feb 14, 2010 23:52
da submax82
con sto double buffering sto impazzendo non capisco bene come funziona, sto leggendo diversi esempi ma ho una gran confusione :( ho scoperto anche BufferStrategy, VolatileImage, BufferedImage!!!