2016-12-02 4 views
0

から入手:GWTの画像は、サーバ

File f = fileFromDatabase // from database the fileName is india.png 
DataInputStream din = new DataInputStream(new FileInputStream(f)); 
din.readFully(data); 
din.close(); 
String base64 = Base64Utils.toBase64(data); 
String[] s = filename.split("\\."); 

base64 = "data:" + "india/png" + ";base64," + base64; 
or 
base64 = "data:image/png;base64," + base64; 

return base64; 

clientSide: 

imageService.getImageData(new AsyncCallback() { 
    @Override 
    public void onSuccess(String imageData) {  
     Image image = new Image(imageData);  
     Canvas.addChild(image); 
     //this Canvas class addItem into com.smartgwt.client.widgets.Window 
     } 
    @Override 
    public void onFailure(Throwable caught) { 

    } 
} 
client side imageData stirng is <image class="gwt-Image src=sume big string starts with "data:image/png;base64,someSting......>" 

本家クライアント側が画像を見ることができませんでした。

あなたがDOMに画像上の負荷ハンドラを追加する必要があるサーバーからbase64文字列を取得すると、私の疑問事前

+0

どのようにキャンバスを使用していますか?イメージをキャンバスに描画する場合は、イメージを使用する前にDOMに添付する必要があります。 base64へのエンコーディングが正しいように見えます。 – WLGfx

+0

レスポンスありがとうmyClassはCanvasを継承しています{すべてのクライアントサイドのコードはここだけですthis.addChild(image)}コンポーネントを描画しているのか、コンポーネントを追加しているのか分かりません。しかし、私はキャンバス上のイメージを見ることができるローカルドライブからイメージを取得します。 –

+0

イメージは引き続きDOMに追加されるためイメージは表示されますが、他の作業を行う予定がある場合は、引き続きLoadHandlerを添付する必要があります。私の目的のために、私は隠されたDOMにそれを添付しなければならなかった、それが読み込まれるのを待って、それをキャンバスに描きました。 – WLGfx

答えて

0

で 感謝をクリアしてください。私がやったやり方は、それをDOMに付けて、以下のコードのように隠すことです。

/** get events preview from server, attach to the DOM and store in 'preview' 
* @param handler option to pass a custom load handler 
*/ 
private void get_preview(LoadHandler handler) { 
    final LoadHandler load_handler = handler; 

    server.getPreviewImage(user, data, new AsyncCallback<String>() { 

     @Override 
     public void onFailure(Throwable caught) { 
      log.info("getPreviewImage: " + error); 
     } 

     @Override 
     public void onSuccess(String result) { 
      preview = null; 

      if (result != null) { 
       ImageElement ie = doc.createImageElement(); 

       preview = Image.wrap(ie); 
       preview.setVisible(false); 

       doc.getElementById("imagedummy").removeAllChildren(); 
       doc.getElementById("imagedummy").appendChild(preview.getElement()); 

       // add load handler to DOM image before being able to use 

       if (load_handler == null) { 

        preview.addLoadHandler(new LoadHandler() { 
         @Override 
         public void onLoad(LoadEvent event) { 
          display_preview(); 
         } 
        }); 
       } else { 
        preview.addLoadHandler(load_handler); 
       } 

       preview.setUrl(result); 
      } 
     } 
    }); 
} 

/** Displays the preview on the canvas. 
* Resizes canvas if necessary and sets zoom 
*/ 
private void display_preview() { 
    EventSize size = data.getEventSize(); 

    canvas.canvas.setCoordinateSpaceWidth(size.width); 
    canvas.canvas.setCoordinateSpaceHeight(size.height); 

    float zoom = Float.parseFloat(preview_zoom.getSelectedValue()); 
    canvas.canvas.setPixelSize((int)(size.width * zoom), (int)(size.height * zoom)); 

    if (preview != null) { 
     ImageElement elem = ImageElement.as(preview.getElement()); 
     canvas.canvas.getContext2d().drawImage(elem, 0, 0); 
    } 
} 
関連する問題