前几天的截图工具其实跟QQ的原理不一样,QQ的截图给人感觉是在按下截图按钮之后界面会冻结,界面怎么可能冻结呢?这里一样用了一个全屏的程序,并把按下按钮之前的屏幕截图,作为全屏程序的背景,这样就给人感觉屏幕以冻结。可能你会问,那这个时候如果我按ALT+TAB切换呢,呵呵,QQ把这个程序作为AlwaysOnTop的了,这样就算你切换完了,还是全屏显示这个冻结的画面。 上次做的感觉原理跟QQ的各有千秋吧,QQ这个就像相机,按下快门就已经截图了,只是后面再在截的图上面做裁剪,而上次的那个是动态的,你先取好景,支好三脚架,然后静待美景的出现,再按下快门。 这里我也修改了一下上次的代码,做了个Java版的QQ截图工具,开始截图之前会先通过Robot截取整个屏幕,然后再通过CropImageFilter对图片做裁剪,裁剪代码如下:
Image captureImage = null; ImageFilter cropFilter; cropFilter = new CropImageFilter(pn.x,pn.y,pn.width,pn.height);//四个参数分别为图像起点坐标和宽高,即CropImageFilter(int x,int y,int width,int height),详细情况请参考API captureImage = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));网上搜索了一下java 图片裁剪,结果少的可怜,看来这个类被人并不常用啊。不过换成从BufferedImage裁剪到Image以后确出了问题,Image不能直接调用ImageIO输出图片了,后面又折腾了半天,把Image又转换会BufferedImage,再保存,晕了,似乎也没什么好的办法了,认了吧。 BufferedImage转Image代码:
BufferedImage bufferedImage = new BufferedImage(captureImage.getWidth(null), captureImage.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = bufferedImage.createGraphics(); g.drawImage(captureImage, null, null);
- 主屏幕截图:
- 截图结果:
2 评论:
哈哈,在linux上全屏是否出问题?
我始终没解决这个问题。
Linux下面没试过啊,不过应该是不一样的,你所说的全屏是指的程序无法盖住整个屏幕么?
发表评论