截屏步骤
截屏方法
1.SWT中截屏
很简单,可以直接用Display来做,如下:
private Image getScreenImage() { GC gc = new GC(getDisplay()); Image image = new Image(getDisplay(), getDisplay().getBounds()); gc.copyArea(image, 0, 0); gc.dispose(); return image; }
可以想象display代表了整个屏,然后把它转存到一个Image上即可。
2.Swing中截屏
Swing中截屏也很简单,直接用Robot类就可以实现,如下:
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); BufferedImage capture = new Robot().createScreenCapture(new Rectangle( new Point(0, 0), screenSize));
3.转换
以前有篇文章讨论过,其实这两种Image之间要进行转换也是很简单的。
Swing Image到SWT Image:
BufferedImage capture = ....; //Swing Image ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(capture, "png", os); byte[] b = os.toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(b); final Image screenImage = new Image(display, is); //SWT Image is.close(); os.close();
SWT Image到Swing Image:
Image image = ...; //SWT Image ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageLoader imageLoader = new ImageLoader(); imageLoader.data = new ImageData[]{image.getImageData()}; imageLoader.save(os, SWT.IMAGE_PNG); byte[] byteArray = os.toByteArray(); ImageIcon imageIcon = new ImageIcon(byteArray); //Swing Image
思路是一样的,就是通过中间存储字节流来进行转换