private void createBlurLayer() { if (!mConfigBlur) return; if (!mBlurCleared) { mBlurLayer.setImageDrawable(new ColorDrawable(0xFFAAAAAA)); return; } // We need to orient the screenshot correctly (and the Surface api seems to take screenshots // only in the natural orientation of the device :!) mDisplay.getRealMetrics(mDisplayMetrics); float[] dims = {mDisplayMetrics.widthPixels / 10, mDisplayMetrics.heightPixels / 10}; float degrees = getDegreesForRotation(mDisplay.getRotation()); boolean requiresRotation = (degrees > 0); if (requiresRotation) { // Get the dimensions of the device in its native orientation mDisplayMatrix.reset(); mDisplayMatrix.preRotate(-degrees); mDisplayMatrix.mapPoints(dims); dims[0] = Math.abs(dims[0]); dims[1] = Math.abs(dims[1]); } // Take the screenshot Bitmap mScreenBitmap = SurfaceControl.screenshot((int) dims[0], (int) dims[1]); if (mScreenBitmap == null) { mBlurLayer.setImageDrawable(new ColorDrawable(0xFFAAAAAA)); return; } if (requiresRotation) { // Rotate the screenshot to the current orientation Bitmap ss = Bitmap.createBitmap(mDisplayMetrics.widthPixels / 10, mDisplayMetrics.heightPixels / 10, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(ss); c.translate(ss.getWidth() / 2, ss.getHeight() / 2); c.rotate(degrees); c.translate(-dims[0] / 2, -dims[1] / 2); c.drawBitmap(mScreenBitmap, 0, 0, null); c.setBitmap(null); // Recycle the previous bitmap mScreenBitmap.recycle(); mScreenBitmap = ss; } // Optimizations mScreenBitmap.setHasAlpha(false); mScreenBitmap.prepareToDraw(); Bitmap blurBitmap = FastBlur.doBlur(mScreenBitmap, 15, false); mBlurLayer.setImageBitmap(blurBitmap); mBlurCleared = false; }
窗口截图+动态模糊记录
最新推荐文章于 2022-12-16 18:33:22 发布