andoid系统截屏功能总结

来源:互联网 发布:基金净值算法 编辑:程序博客网 时间:2024/06/06 01:02

在做文件夹背景高斯模糊的过程中遇到的截屏功能问题总结:


android高斯模糊算法都已经很成熟了,目前来说还是github上的FastBlur效率最快。因为是要做实时背景模糊,所以会涉及到截屏的功能。刚开始用的是用下面的代码来实现截屏:

private Bitmap screenshot() {      View view = getWindow().getDecorView();      view.setDrawingCacheEnabled(true);      view.buildDrawingCache(true);      /**      * 获取当前窗口快照,相当于截屏      */      Bitmap bmp1 = view.getDrawingCache();      return bmp1;}  

但是得到截图后,模糊出来的效果一直不是我想要的效果,模糊出来是这样的:



我用别的图片测试过模糊算法绝对没问题,那么问题一定出在截图上,所以我把截图保存下来,导出查看,才发现用上面那个函数得到的截图只是上层的应用图标的图,并没有把桌面背景也一起截进去,背景是透明的,所以才会导致模糊出来的效果是上面那样的:



后来网查了好久都没找到好的截图实现方法。所以自己到SystemUi下面找系统截图的代码,提取了下,自己实现了截屏功能:

   private Bitmap takeScreenshot(Context context) {    Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();    DisplayMetrics displayMetrics =  new DisplayMetrics();;    display.getRealMetrics(displayMetrics);        float[] dims = {displayMetrics.widthPixels, displayMetrics.heightPixels};        // Take the screenshot        Bitmap screenBitmap = SurfaceControl.screenshot((int) dims[0], (int) dims[1]);        return screenBitmap;    }
不过,在使用这个函数有两个前提,就是在编译的时候要在Android.mk里的加上:

LOCAL_CERTIFICATE := platform

并且在Androidmanifest.xml里加上权限:

    <uses-permission android:name="android.permission.READ_FRAME_BUFFER" /> 

虽然获得截图的效率低了,但是加上高斯模糊后确实达到了我期望的效果:



0 0