andoid系统截屏功能总结

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


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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值