Pergunta

Eu estou procurando uma maneira rápida e fácil de traçar pixels arbitrariamente coloridas em uma tela SWT. Até agora eu estou usando algo parecido:

// 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();

Esta é terrivelmente terrivelmente lento. leva cerca de um segundo e meio para preencher uma tela com 300x300 pixels. Eu poderia criar uma imagem fora da tela, defina os pixels nele e, em seguida, desenhar a imagem. Este será mais rápido, mas eu quero especificamente o efeito de pintura gradual de tramar o pixel da imagem de pixel na tela.

Foi útil?

Solução

Você pode desenhar várias imagens fora da tela onde você gradualmente preencher a área de 300x300. Desta forma, você pode controlar o quão rápido a imagem deve aparecer.

Outras dicas

Eu aposto que o que está matando desempenho está alocando e liberando 90.000 objetos Color. Lembre-se, em SWT, cada objeto Color aloca recursos nativos, razão pela qual você tem que dispose()-lo. Isto significa que cada vez que você alocar e descartar um objeto Color, você tem que transição do JVM para código nativo e nas costas.

Você pode armazenar em cache as instâncias Color enquanto no circuito de pixel 300x300 e, em seguida, descartar os objetos após o loop? Você precisa de um esconderijo um pouco inteligente que apenas detém um máximo de tantos objetos, e depois disso irá dispor de algumas de suas entradas, mas isso deve acelerar as coisas muito .

Crie um objeto BufferedImage:

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

dentro do loop desenho definir suas pixels:

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

e, finalmente, mostrar a imagem tamponada:

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

Se você encontrar setRGB () lento, você pode acessar os dados de bitmap diretamente:

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

e depois

raster[y * 300 + x] = int_rgb;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top