はじめに
今回はJetpack Composeを使って画面内を画像として保存する方法を紹介していきます。
少しいじるだけで任意の箇所を画像として保存することもできるようになるのでぜひお試しください
本文
早速ですがコードを書いていきます
Screen
suspend fun toBitmap(activity: Activity): suspend coroutine<Bitmap> {
activity.window?.let {
val view = it.decorView
// 今回はRGBの各8ビット
val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
// ソース,画面内で使用するRect,書き込み先のBitmap,完了時コールバック,コールバックを呼ぶスレッド用のHandler
PixelCopy.request(
window,
Rect(0, 0, window.width, window.heght),
bitmap,
{ result ->
if (result == PixelCopy.SUCCESS) {
it.resume(bitmap)
} else {
it.resumeWithException("ErrorMessage")
}
},
Handler(Looper.getMainLooper()
)
)
}
}
上記のメソッドをボタン押下時や画面の長押しなど任意のタイミングに呼び出すことで画像として保存することができるようになります
最後に
以前、自分で実装しようとしていて現状では難しいという結果になってしまったものを今ではどうかなと思い調べたのがきっかけで今回記事にしてみました。
どなたかのお役に立てれば幸いです