public Image defaultCapture(Control control) { Image image = new Image(control.getDisplay(), control.getBounds()); GC gc = new GC(image); try { if (control.print(gc)) { return image; } else { image.dispose(); Rectangle bounds = control.getBounds(); return getImage(control, bounds.width, bounds.height, true); } } finally { DisposeUtil.dispose(gc); } }
public Image captureImage(Control control) { Rectangle rectangle = control.getBounds(); Display display = control.getDisplay(); Image image = null; if (control instanceof Shell) { Shell shell = (Shell) control; shell.layout(); Point parentLocation = control.toDisplay(0, 0); image = getImage(control, rectangle.width, rectangle.height, false); rectangle.x = parentLocation.x; rectangle.y = parentLocation.y; GC myImageGC = new GC(image); try { for (Control child : shell.getChildren()) { Rectangle childBounds = child.getBounds(); // bug of SWT on Win32, child bounds is not correct in the Window is not in the ToolBar int x = (rectangle.width - childBounds.width) / 2; int y = (rectangle.height - childBounds.height) - x; childBounds.x = rectangle.x + x; childBounds.y = rectangle.y + y; if (!rectangle.intersects(childBounds)) continue; // Child is completely outside parent. Image childImage = new Image(display, child.getBounds()); GC gc = new GC(childImage); child.print(gc); DisposeUtil.dispose(gc); try { myImageGC.drawImage(childImage, x, y); } finally { childImage.dispose(); } } } finally { myImageGC.dispose(); } } else { image = defaultCapture(control); } return image; }