让SWT浏览器将其输出呈现给图像

时间:2012-10-28 17:54:45

标签: java image browser swt render


我正在开发一个Java / Eclipse SWT应用程序,它以堆叠的方式显示和编辑由特殊设备捕获的地图数据,即可以显示/隐藏或修改不同的“地理空间特征”层。发现有一个可以容易地检索的航空图像层是有帮助的,例如,来自谷歌地图。

我想过使用SWT浏览器小工具来检索和渲染这个卫星视图,它实际上就像一个魅力。问题是我需要一个隐藏的浏览器小部件,它可以在后台运行并返回给我一个swt.graphics.Image等渲染内容,甚至可以更好地直接使用给定的GC进行绘制

我也考虑过更简单的解决方案,但有两个限制:

  1. 我不能只使用谷歌的静态地图,因为我需要的地图图块必须比它们允许的大,并且它们提供的部分重新加载(例如,当移动地图视图端口时)也非常方便。 / LI>
  2. 出于以下几个原因,我无法简单地将数据提供给Google地图。
  3. 所以一般情况下:如何让浏览器小部件的(隐藏)实例将其输出呈现给图像/ GC而不是屏幕。除了可以完成这项工作的浏览器小部件之外还有其他什么吗?

2 个答案:

答案 0 :(得分:1)

我认为您可以使用org.eclipse.swt.widgets.Control.print(GC) method将控件打印到图像。我没有尝试过浏览器。

答案 1 :(得分:0)

以下是使用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();

}

我们可以想到的另一种方法

user capture div as image and save to computer

将java脚本执行到SWT Browser Browser.execute(java script)以将div捕获到图像中。