Как заблокировать / заморозить предварительный просмотр CameraX TextureView?
Я следую за лабораторией кода CameraX, а также посмотрел их пример приложения и исходный код в Android Studio, но, похоже, нет способа заморозить или заблокировать TextureView
это показывает предварительный просмотр кадров.
В API Camera2 мы можем просто вызвать что-то вроде cameraCaptureSession?.stopRepeating()
и TextureView
перестанет получать входные данные с камеры.
Мой сценарий использования для замораживания предварительного просмотра - показать пользователю изображение, которое в данный момент сохраняется, когда я добавляю другие анимации поверх TextureView
,
2 ответа
// You can unbind from any UseCase
CameraX.unbind(previewUseCase)
// In this way TextureView will hold the last frame
Вы можете использовать для захвата последнего изображения, которое появляется на экране предварительного просмотра. Это очень быстро, и вам даже не нужно поворачивать или переворачивать изображение.
мой код XML:
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="3:3"
app:layout_constraintTop_toTopOf="parent"/>
<ImageView
android:visibility="gone"
android:id="@+id/ivPreview"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="3:3"
app:layout_constraintTop_toTopOf="parent"/>
мой предыдущий код, обрабатывающий изображение из
OnImageCapturedCallback
или же :
private fun showCapturedImage(bitmap: Bitmap, rotationDegrees: Float) {
viewFinder.visibility = View.GONE
ivPreview.visibility = View.VISIBLE
var rotatedBitmap = ImageUtils.rotateImage(bitmap, rotationDegrees).toSquare()
if (isTakeFacePhoto){
rotatedBitmap = rotatedBitmap.flipBitmap()
}
ivPreview.setImageBitmap(rotatedBitmap)
}
текущий код после использования:
val bitmap = viewFinder.getBitmap()
showCapturedImage(bitmap)
private fun showCapturedImage(bitmap: Bitmap) {
viewFinder.visibility = View.GONE
ivPreview.visibility = View.VISIBLE
ivPreview.setImageBitmap(bitmap)
}
Если вы планируете сохранить изображение с помощью, имейте в виду, что может быть небольшая задержка с
PreviewView.getBitmap()
и сохраненный файл из
OnImageSavedCallback
поэтому эти два изображения могут действительно отличаться в зависимости от задержки.