用于画布的GWT图像加载

时间:2011-05-01 06:53:55

标签: html5 gwt canvas image-loading

不使用任何图像加载库,我正在加载如下图像:

final Image img = new Image();
img.setVisible(false);
RootPanel.get().add(img);
img.addErrorHandler(new ErrorHandler() {
    @Override
    public void onError(ErrorEvent event) {
        System.out.println(event);
    }
});
img.addLoadHandler(new LoadHandler() {
    @Override
    public void onLoad(LoadEvent event) {
        ImageElement data = ImageElement.as(img.getElement());
        RootPanel.get().remove(img);
        obj.setData(data);
        System.out.println("Arrived:" + (System.currentTimeMillis()-startTime) + "ms");
        render();
    }
});

不使用     。RootPanel.get()加(IMG); 图像永远不会添加到DOM中。所以onLoad不会被触发。 但是当你将图像添加到DOM中时,如果你不删除它,这将是内存泄漏。

我对上述代码的观察:

  1. 如果我不将图像添加到DOM,则不会触发加载处理程序。
  2. 如果我这样做,但加载后不要删除,则会发生内存泄漏。
  3. 我这样做,我确实删除了,Chrome会在256 MB后调用垃圾回收。 Firefox从未调用垃圾收集。因此发生了内存泄漏。可能是Firefox会在需要时调用垃圾收集器。我不太了解这个问题。
  4. 我的问题是,是否有图像加载程序(库)处理图像加载?
    图像加载后,是否会自动从DOM中删除图像?
    有没有更合适的方法来处理这个问题,你在绘制许多图像但绘图后不需要图像?
    还有快速的方法来添加和删除DOM中的图像吗?

1 个答案:

答案 0 :(得分:1)

要加载图片,请使用com.google.gwt.widgetideas.graphics.client.ImageLoader

一次加载大量图像。