我在寻找一个快速简便的方法在SWT画布绘制任意颜色的像素。 到目前为止,我使用这样的事情:

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

这是可怕的可怕缓慢。它需要大约一秒半填补了300x300的画布像素。 我可以创建离屏图像时,将在它的像素,然后绘制图像。这将是速度快,但我特别希望由像素在画布上绘制图像的像素的逐渐画效果。

有帮助吗?

解决方案

您可以得出几个屏外图像,你逐渐填补了300x300的区域。这样,您就可以控制图像如何快速出现。

其他提示

我敢打赌,什么是杀害业绩分配和释放90000个Color对象。请记住,在SWT,每个Color对象分配本机资源,这就是为什么你必须dispose()它。这意味着在每次分配和配置一个Color对象时,就必须从JVM为本地代码和回转型。

您可以缓存你Color情况下,而在300x300的像素循环,然后处置您的循环之后的对象?你需要一个稍微智能高速缓存,只有最多保存这么多的对象,之后将出售它的一些条目,但是这应该加快速度极大地

创建BufferedImage对象:

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

内的绘图循环设定像素:

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

和最后显示缓冲图像:

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

如果你发现setRGB()慢,可以直接访问的位图数据:

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

和后

raster[y * 300 + x] = int_rgb;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top