题
我在寻找一个快速简便的方法在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;
不隶属于 StackOverflow