一個截圖工具類

包括:截圖不包括當前頁面的dialog,截圖包括dialog,獲取屏幕像素,保存圖片到系統相冊,將bitmap轉爲base64字符串

class ScreenUtils private constructor() {

    companion object {
        /**
         * 當前頁面截屏 不包括dialog
         *
         * @param activity
         * @return
         */
        fun screenShotWithoutDialog(activity: Activity): Bitmap? {

            // 獲取windows中最頂層的view
            val view = activity.window.decorView
            //允許當前窗口保存緩存信息
            view.isDrawingCacheEnabled = true
            view.buildDrawingCache()
            val windowManager = activity.windowManager
            //獲取屏幕寬和高
            val outMetrics = DisplayMetrics()
            windowManager.defaultDisplay.getMetrics(outMetrics)
            val width = outMetrics.widthPixels
            val height = outMetrics.heightPixels
            val bitmap = Bitmap.createBitmap(view.drawingCache, 0, 0, width, height)
            var bitmapStr = bitmapToBase64(bitmap)
            //銷燬緩存信息
            view.destroyDrawingCache()
            view.isDrawingCacheEnabled = false

            return bitmap
        }

        /**
         * 當前頁面截屏 包括dialog
         *
         * @param activity
         * @return
         */
        fun screenShotWithDialog(activity: Activity): Bitmap? {
            val bitmap = Falcon.takeScreenshotBitmap(activity)
            return bitmap
        }

        /**
         *  獲取屏幕像素
         *
         *  @param activity
         *  @return array[0]:widthPixels ; array[1]:heightPixels
         */
        fun getScreenDensity(activity: Activity): IntArray? {
            val windowManager = activity.windowManager
            val outMetrics = DisplayMetrics()
            windowManager.defaultDisplay.getMetrics(outMetrics)
            val width = outMetrics.widthPixels
            val height = outMetrics.heightPixels
            val densityArrary: IntArray? = IntArray(2)
            densityArrary?.set(0, width)
            densityArrary?.set(1, height)
            return densityArrary
        }


        /**
         *  保存圖片到系統路徑
         *
         *  @param bitmap
         *  @param activity
         *  @param name 圖片名稱
         */
        fun saveBitmapToDCIM(bitmap: Bitmap?, activity: Activity, name: String) {
            var PATH: String =
                Environment.getExternalStorageDirectory().absolutePath + File.separator +
                        Environment.DIRECTORY_DCIM + File.separator + "Camera" + File.separator
            val fileName = "$name.png"
            val f = File(PATH, fileName)
            if (f.exists()) {
                f.delete()
            } else {
                f.mkdirs()
                f.delete()
            }
            try {
                val out = FileOutputStream(f)
                bitmap?.compress(Bitmap.CompressFormat.PNG, 100, out)
                out.flush()
                out.close()
                //保存圖片後發送廣播通知更新數據庫
                val uri = Uri.fromFile(f)
                activity.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))
            } catch (e: IOException) {
                e.printStackTrace()
            } finally {
                bitmap?.recycle()
            }
        }

        /**
         *  bitmap 轉base64字符串
         *
         *  @param bitmap
         */
        fun bitmapToBase64(bitmap: Bitmap?): String? {
            var bmpStr: String? = null
            var bmpOs: ByteArrayOutputStream? = null

            try {
                if (bitmap != null) {
                    bmpOs = ByteArrayOutputStream()
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, bmpOs)
                    bmpOs.flush()
                    bmpOs.close()
                    bmpStr = Base64.encodeToString(bmpOs.toByteArray(), Base64.DEFAULT)
                }
            } catch (e: Exception) {
                e.printStackTrace()
            } finally {
                try {
                    bmpOs?.close()
                } catch (e: IOException) {
                    e.printStackTrace()
                }
            }
            return bmpStr
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章