截屏方法
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 Imageis.close();os.close();
?
SWT Image到Swing Image:
Image image = ...; //SWT ImageByteArrayOutputStream 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?
思路是一样的,就是通过中间存储字节流来进行转换