Repository 32bit  Forum
Repository 64bit  Wiki

[java] MemoryImageSource double buffering

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[java] MemoryImageSource double buffering

Messaggioda submax82 » ven feb 12, 2010 0:53

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:
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: MemoryImageSource double buffering

Messaggioda 414N » ven feb 12, 2010 10:34

Ma di quale linguaggio stai parlando?
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2881
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [java] MemoryImageSource double buffering

Messaggioda submax82 » ven feb 12, 2010 10:59

java scusate! l'ho aggiunto nel titolo.
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: [java] MemoryImageSource double buffering

Messaggioda submax82 » ven feb 12, 2010 13:14

ho provato a implementare il double buffer ma non cambia nulla!!! :evil: :evil: :evil:
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: [java] MemoryImageSource double buffering

Messaggioda m0rdr3d » ven feb 12, 2010 15:21

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.
Avatar utente
m0rdr3d
Linux 2.4
Linux 2.4
 
Messaggi: 404
Iscritto il: dom dic 24, 2006 13:40
Slackware: Slackware64-current
Kernel: 3.4.*
Desktop: KDE 4.8.2

Re: [java] MemoryImageSource double buffering

Messaggioda FireEater » ven feb 12, 2010 15:55

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
Avatar utente
FireEater
Linux 2.6
Linux 2.6
 
Messaggi: 508
Iscritto il: sab feb 05, 2005 0:00
Località: Cagliari <---> Torino
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4

Re: [java] MemoryImageSource double buffering

Messaggioda submax82 » ven feb 12, 2010 17:00

ho usato proprio la tecnica con la drawImage però non funge, più tardi mi spiego meglio :D
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: [java] MemoryImageSource double buffering

Messaggioda submax82 » ven feb 12, 2010 22:38

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?
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: [java] MemoryImageSource double buffering

Messaggioda submax82 » dom feb 14, 2010 23:52

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!!!
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti