Java 让SWT浏览器将其输出渲染到图像
Java 让SWT浏览器将其输出渲染到图像,java,image,browser,swt,render,Java,Image,Browser,Swt,Render,我正在开发一个Java/EclipseSWT应用程序,它以堆叠的方式显示和编辑由特殊设备捕获的地图数据,也就是说,有不同的“地理空间特征”层可以显示/隐藏或修改。人们发现,拥有一个可以轻松检索的航空图像层(例如,从谷歌地图中检索)是很有帮助的 我想到了使用SWT浏览器小部件来检索和渲染这个卫星视图,它实际上就像一个魔咒。问题是我需要一个隐藏的浏览器小部件,它可以在后台工作,并返回渲染内容的swt.graphics.Image等或者更好地直接使用给定的GC进行绘图 我也考虑过更简单的解决方案,但有
我正在开发一个Java/EclipseSWT应用程序,它以堆叠的方式显示和编辑由特殊设备捕获的地图数据,也就是说,有不同的“地理空间特征”层可以显示/隐藏或修改。人们发现,拥有一个可以轻松检索的航空图像层(例如,从谷歌地图中检索)是很有帮助的 我想到了使用SWT浏览器小部件来检索和渲染这个卫星视图,它实际上就像一个魔咒。问题是我需要一个隐藏的浏览器小部件,它可以在后台工作,并返回渲染内容的swt.graphics.Image等或者更好地直接使用给定的GC进行绘图 我也考虑过更简单的解决方案,但有两个限制:
一般来说:如何让浏览器小部件的(隐藏)实例将其输出呈现给Image/GC而不是屏幕。除了浏览器小部件之外,还有其他什么可以完成这项工作吗?我认为您可以使用
org.eclipse.swt.widgets.Control.print(GC)
将控件打印到图像上。但我还没有在浏览器上试用过它。这里是使用SWT浏览器
控件的示例
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();
}
我们可以想到的另一种方法
将java脚本执行到SWT浏览器中。执行(java脚本)将div捕获到图像中