我正在开发一个Java / Eclipse SWT应用程序,它以堆叠的方式显示和编辑由特殊设备捕获的地图数据,即可以显示/隐藏或修改不同的“地理空间特征”层。发现有一个可以容易地检索的航空图像层是有帮助的,例如,来自谷歌地图。
我想过使用SWT浏览器小工具来检索和渲染这个卫星视图,它实际上就像一个魅力。问题是我需要一个隐藏的浏览器小部件,它可以在后台运行并返回给我一个swt.graphics.Image等渲染内容,甚至可以更好地直接使用给定的GC进行绘制
我也考虑过更简单的解决方案,但有两个限制:
所以一般情况下:如何让浏览器小部件的(隐藏)实例将其输出呈现给图像/ GC而不是屏幕。除了可以完成这项工作的浏览器小部件之外还有其他什么吗?
答案 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捕获到图像中。