4
/**
 * This is the entry point method.
 */
public void onModuleLoad() {
    Canvas canvas = Canvas.createIfSupported();
    final Context2d context2d = canvas.getContext2d();

    RootPanel.get("canvas").add(canvas);
    Image img = new Image("face.png");
    final ImageElement face = ImageElement.as(img.getElement());
    img.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            context2d.drawImage(face, 0, 0);
        }
    });
    //RootPanel.get("canvas").add(img);
}

これは私のコードです。キャンバスに画像を描きたいです。これは、最後の行が次の場合に機能します。

RootPanel.get( "canvas")。add(img);

コメントアウトされていません。

しかし、コメントされた行で、画像がロードされないようです。何か案は?

4

4 に答える 4

4

画像の読み込みをトリガーするには、画像ウィジェットをページに追加する必要があります。見えないようにするだけです。

public void onModuleLoad() {    
    Canvas canvas = Canvas.createIfSupported();
    final Context2d context2d = canvas.getContext2d();

    RootPanel.get().add(canvas);
    Image img = new Image("face.png");
    final ImageElement face = ImageElement.as(img.getElement());
    img.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            context2d.drawImage(face, 0, 0);
        }
    });

    img.setVisible(false);
    RootPanel.get().add(img);
}        
于 2013-06-04T16:40:09.887 に答える
3

画像をWEB-INFフォルダー内に配置しましたか?ここからGWTが画像をロードします。通常は、「images/face.png」でロードできるように「images」フォルダを作成することをお勧めします。

于 2012-05-09T03:27:34.803 に答える
0

http://code.google.com/p/google-web-toolkit-incubator/wiki/ImageLoaderなどの画像ローダーを使用できます。

于 2012-04-03T20:50:05.453 に答える
0

ロードするために画像をページに追加する必要がないようにしたい場合(画像がページ上でフラッシュする可能性があります)、ネイティブJavaScriptロードを使用できます。

package com.mypackage;

public interface Loaded<T> {
    public void data(T data);
}
public static native void loadImageNative(String imgBase64, Loaded<ImageElement> loaded) /*-{
    var image = new Image();
    image.onload = function() {
        loaded.@com.mypackage.Loaded::data(*)(image);
    };
    image.src = imgBase64;
}-*/;

public void onModuleLoad() {    
    Canvas canvas = Canvas.createIfSupported();
    Context2d context2d = canvas.getContext2d();
    String base64Img = MyResouces.myImage().getSafeUri().asString();

    RootPanel.get().add(canvas);

    loadImageNative(base64Img, imageLoaded -> {
        context2d.drawImage(imageLoaded, 0, 0);
    });
}       
于 2021-10-02T05:38:27.860 に答える