重点代码如下,利用GC复制widget的像素点到Image对象,并使用ImageLoader保存文件输出流
GC gc = new GC(browser);
Image image = new Image(display, browser.getSize().x,browser.getSize().y);
gc.copyArea(image, 0, 0);
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {image.getImageData()};
imageLoader.save("C:/Temp/save.png", SWT.IMAGE_PNG);
示例程序如下
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL);
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite leftComposite = new Composite(sashForm, SWT.NONE);
leftComposite.setLayout(new GridLayout());
Button saveImgBtn = new Button(leftComposite,SWT.PUSH);
saveImgBtn.setText("保存图片");
Composite rightComposite = new Composite(sashForm, SWT.NONE);
rightComposite.setLayout(new FillLayout());
Browser browser = new Browser(rightComposite, SWT.BORDER);
browser.setUrl("https://www.baidu.com/");
browser.setLayoutData(new GridData(GridData.FILL_BOTH));
sashForm.setWeights(new int[] {1,4});
saveImgBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
GC gc = new GC(browser);
Image image = new Image(display, browser.getSize().x,browser.getSize().y);
gc.copyArea(image, 0, 0);
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {image.getImageData()};
imageLoader.save("C:/Temp/save.png", SWT.IMAGE_PNG);
}
});
shell.open();
while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
打开该示例程序,并点击保存图片按钮
右半边的浏览器就会自动保存到C:/Temp/save.png图片上