Domanda

Sto cercando un modo semplice e veloce per tracciare arbitrariamente pixel colorati in una tela di SWT. Finora sto usando qualcosa di simile:

// initialization:
GC gc = new GC(canvas);

// inside the drawing loop:
Color cc = new Color(display, r, g, b);
gc.setForeground(cc);
gc.drawPoint(x, y);
cc.dispose();

Questa è terribilmente terribilmente lento. ci vuole circa un secondo e mezzo per riempire una tela 300x300 pixel con. Potrei creare un'immagine off-screen, impostare i pixel in esso e quindi disegnare l'immagine. Questo sarà più veloce ma ho specificamente desidera che l'effetto pittura graduale di aver complottato l'immagine pixel per pixel sulla tela.

È stato utile?

Soluzione

Si potrebbe trarre diverse immagini fuori schermo in cui è gradualmente riempire l'area 300x300. In questo modo è possibile controllare la velocità deve apparire l'immagine.

Altri suggerimenti

Scommetto che le prestazioni che cosa sta uccidendo è l'allocazione e il rilascio 90.000 oggetti Color. Ricordate, in SWT, ogni oggetto Color alloca le risorse autoctone, che è il motivo per cui si deve dispose() esso. Questo significa che ogni volta che si allocare e smaltire un oggetto Color, è necessario passare da JVM al codice nativo e viceversa.

Si può memorizzare nella cache le istanze Color mentre nel ciclo 300x300 pixel e poi smaltire gli oggetti dopo il vostro ciclo? Avreste bisogno di una cache intelligente che tiene un po 'solo un massimo di tanti oggetti, e dopo che disporrà di alcune delle sue voci, ma questo dovrebbe accelerare le cose molto .

Creare un oggetto BufferedImage:

BufferedImage bi = new new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);

all'interno del ciclo di disegno impostare le pixel:

bi.setRGB(x, y, int_rgb);
...

e, infine, visualizzare l'immagine tamponata:

g.drawImage(bi, 0, 0, null); 

Se si trova setRGB () lento, è possibile accedere direttamente ai dati bitmap:

int[] raster = ((DataBufferInt)bi.getRaster().getDataBuffer()).getData();

e poi

raster[y * 300 + x] = int_rgb;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top