Android Compose PreviewView Bitmap имеет значение null, даже если предварительный просмотр работаетAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android Compose PreviewView Bitmap имеет значение null, даже если предварительный просмотр работает

Сообщение Anonymous »

Я работаю над специализированным промышленным устройством под управлением Android 7.1
Я хочу делать снимки экрана предварительного просмотра камеры (в формате jpg) в хранилище кэша, когда на устройстве происходит событие (это событие вызывает Блок LaunchedEffect).
Мой текущий код выглядит так:

Код: Выделить всё

@Composable
fun CameraScreen() {

val coroutineScope = rememberCoroutineScope()
val lifecycle = LocalLifecycleOwner.current
val ctx = LocalContext.current
val vm = viewModel()

var cameraProvider: ProcessCameraProvider
var cameraPreviewView = PreviewView(ctx).apply {
this.scaleType = scaleType
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
implementationMode = PreviewView.ImplementationMode.COMPATIBLE
}

val imageCapture by remember {
mutableStateOf(
ImageCapture.Builder()
.setJpegQuality(80)
.setResolutionSelector(
ResolutionSelector.Builder()
.setResolutionStrategy(
ResolutionStrategy(
Size(640, 480),
ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER
)
)
.setAspectRatioStrategy(AspectRatioStrategy.RATIO_4_3_FALLBACK_AUTO_STRATEGY)
.build()
)
.setCaptureMode(CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
)
}

LaunchedEffect(vm.eventHappened) {
if (vm.eventHappened) {
val bitmap = cameraPreviewView.bitmap  // !!! HERE BITMAP IS ALWAYS NULL
if (bitmap != null) {
saveBitmapImageToFile(vm.photoFile, bitmap)
}
}
}

Box(
modifier = Modifier.fillMaxSize()
) {

AndroidView(
modifier = Modifier.width(pixelToDp(640)).height(pixelToDp(480)),
factory = { context ->
val previewUseCase = Preview.Builder()
.build()
.also {
it.surfaceProvider = cameraPreviewView.surfaceProvider
}

coroutineScope.launch {
val cameraProviderFuture = ProcessCameraProvider.getInstance(ctx)
cameraProviderFuture.addListener({
cameraProvider = cameraProviderFuture.get()
val cameraSelector = CameraSelector.Builder()
.apply {
requireLensFacing(CameraSelector.LENS_FACING_BACK)
}.build()
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(lifecycle, cameraSelector, previewUseCase, imageCapture)
}, ContextCompat.getMainExecutor(ctx))
}
cameraPreviewView
}
)
}
}

Предварительный просмотр камеры работает без проблем, но при запуске vm.eventHappened растровое изображение, возвращаемое из cameraPreviewView, имеет нулевое значение.
Я также пробовал вызвать cameraPreviewView.drawToBitmap(), но это дает сбой, за исключением того, что перед вызовом drawToBitmap() необходимо создать представление View
Спасибо за вся помощь.

Подробнее здесь: https://stackoverflow.com/questions/792 ... is-working
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»