andoid系统截屏功能总结

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


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

private Bitmap screenshot() {  

	    View view = getWindow().getDecorView();  
	    view.setDrawingCacheEnabled(true);  
	    view.buildDrawingCache(true);  

	    /** 
	     * 获取当前窗口快照,相当于截屏 
	     */  
	    Bitmap bmp1 = view.getDrawingCache();  
	    return bmp1;

}  

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

andoid系统截屏功能总结_第1张图片


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

andoid系统截屏功能总结_第2张图片


后来网查了好久都没找到好的截图实现方法。所以自己到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" /> 

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

andoid系统截屏功能总结_第3张图片


你可能感兴趣的:(andoid系统截屏功能总结)