2


私は、特別なデバイスによってキャプチャされたマップデータを積み重ねて表示および編集するJava / Eclipse SWTアプリケーションに取り組んでいます。つまり、表示/非表示または変更できる「地理空間機能」のさまざまなレイヤーがあります。たとえばグーグルマップから簡単に取得できる航空画像レイヤーがあると便利であることがわかりました。

SWT Browser Widgetを使用して、この衛星ビューを取得してレンダリングすることを考えました。これは実際には魅力のように機能します。問題は、バックグラウンドで動作し、レンダリングされたコンテンツのswt.graphics.Imageなどを返す、または特定のGCを直接使用して描画する非表示のブラウザウィジェットが必要なことです。

もっと簡単な解決策も考えましたが、2つの制限があります。

  1. Googleの静的マップを使用することはできません。必要なマップタイルは、許可されているよりも大きくする必要があり、それらが提供する部分的なリロード(たとえば、マップビューポートを移動する場合)も非常に便利です。
  2. いくつかの理由で、データをGoogleマップに単純にフィードすることはできません。

したがって、一般的には、ブラウザウィジェットの(非表示の)インスタンスで、その出力を画面ではなくImage/GCにレンダリングするにはどうすればよいですか。その仕事をすることができるブラウザウィジェット以外に何か他のものはありますか?

4

2 に答える 2

1

SWT Browserコントロールの使用を開始するためのサンプルを次に示します

  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Browser Test");
    shell.setSize(500, 500);
    shell.setLayout(new GridLayout(1,false));

    final Browser browser = new Browser(shell, SWT.NONE);

    browser.setUrl("https://maps.google.com/maps?hl=en&tab=wl");
    //browser.setVisible(false);
    browser.setLayoutData(new GridData(GridData.FILL_BOTH));

    Button b = new Button(shell, SWT.NONE);
    b.setText("Show");
    b.addListener(SWT.Selection, new Listener() {

        @Override
        public void handleEvent(Event event) {


            Image img = new Image(display, 500, 500);
            GC gc = new GC(img);
            browser.print(gc);
            gc.dispose();

            showImage(img);

        }
    });

    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }


private static class ImageDialog extends Dialog
{

    private Image img;

    protected ImageDialog(Shell parentShell,Image img) {
        super(parentShell);
        this.img = img;
    }
    @Override
    protected Control createDialogArea(Composite parent) {

        Composite comp =  (Composite) super.createDialogArea(parent);

        Label lbl = new Label(comp,SWT.NONE);

        lbl.setImage(img);

        return comp;
    }

    @Override
    protected void okPressed() {
        img.dispose();
        super.okPressed();
    }

}
protected static void showImage(Image img) {

    ImageDialog dialog = new ImageDialog(Display.getDefault().getActiveShell(), img);
    dialog.open();

}

私たちが考えることができる別のアプローチ

ユーザーはdivを画像としてキャプチャし、コンピューターに保存します

javaスクリプトを実行しSWT Browser Browser.execute(java script)て、divをイメージにキャプチャします。

于 2012-10-29T03:53:25.370 に答える
1

org.eclipse.swt.widgets.Control.print(GC) このメソッドを使用して、コントロールを画像に出力できると思います。ただし、ブラウザでは試していません。

于 2012-10-28T21:12:29.967 に答える