最近有个需求,要求截屏上传,所以给封装了一个工具类,可以截屏,保存截屏并压缩写文件,返回压缩后文件的字节流,相信会比较实用
package com.purui.common.utils
import android.graphics.Bitmap
import android.view.View
import com.lujianfei.netlog.NetLog
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
object ScreenShotHelper {
/**
* 屏幕截取
*/
fun take(view:View):Bitmap {
view.isDrawingCacheEnabled = true
view.buildDrawingCache(true)
val bitmap = Bitmap.createBitmap(view.drawingCache)
view.isDrawingCacheEnabled = false
return bitmap
}
/**
* 保存位图并返回压缩后写 jpg 文件的字节流
*/
fun saveBitmap(file: File, bitmap: Bitmap, callback:(bytes:ByteArray)->Unit) {
val outputStream = FileOutputStream(file)
kotlin.runCatching {
// 图片有损压缩至 80%
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outputStream)
}.onFailure {
NetLog.sendLog("ScreenShotHelper bitmap.compress $it")
}
kotlin.runCatching {
outputStream.close()
}.onFailure {
NetLog.sendLog("ScreenShotHelper outputStream.close $it")
}
val inputStream = FileInputStream(file)
val buffer = ByteArray(1024)
val byteArrayOutputStream = ByteArrayOutputStream()
while (true) {
val len = inputStream.read(buffer)
if (len == -1) {
break
}
byteArrayOutputStream.write(buffer, 0, len)
}
callback.invoke(byteArrayOutputStream.toByteArray())
}
}