import android.graphics.Bitmap
import android.graphics.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.BasicText
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.core.view.drawToBitmap

@Composable
fun CaptureComposableScreenshot() {
    var screenshotBitmap by remember { mutableStateOf<Bitmap?>(null) }
    
    val context = LocalContext.current
    val view = LocalView.current

    Box(modifier = Modifier.fillMaxSize()) {
        // 显示被截图的内容
        Box(
            modifier = Modifier
                .size(200.dp)
                .background(Color.Blue)
        ) {
            Text(text = "Jetpack Compose Screenshot", color = Color.White)
        }

        // 按钮:截图
        Button(
            onClick = {
                // 获取当前的视图并捕获截图
                screenshotBitmap = view.drawToBitmap()
            },
            modifier = Modifier
                .size(100.dp)
                .background(Color.Gray)
        ) {
            Text("Capture")
        }
    }

    // 显示截图
    screenshotBitmap?.let {
        // 使用图片展示或保存截图
        // 例如:Image(bitmap = it.asImageBitmap(), contentDescription = "Screenshot")
    }
}
 

重要问题 view.drawToBitmap() 时可能会出现

Software rendering doesn't support hardware bitmaps 崩溃问题

原因是 显示图片时 应该设置 

allowHardware(false)

更多推荐