web-dev-qa-db-fra.com

Comment définir un format d'image correct à l'aide de CameraX?

Je suis le CameraX codelab et j'obtiens un mauvais rapport d'aspect sur l'aperçu même en utilisant les méthodes setTargetAspectRatio et setTargetResolution.

private fun startCamera() {
    // Create configuration object for the viewfinder use case
    val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio(Rational(1, 1))
        setTargetResolution(Size(640, 640))
    }.build()
    ...

Et la mise en page utilise une taille codée en dur telle que présentée dans le codelab.

<TextureView
    Android:id="@+id/view_Finder"
    Android:layout_width="640px"
    Android:layout_height="640px"
    ...

Ce serait bien si la bibliothèque avait CameraTextureView et une propriété Android:scaleType (similaire à l'existant pour le ImageView) pour ajuster l'aperçu à la taille de l'aperçu.

CameraX wrong aspect ratio

7
nglauber

Vous pouvez définir le rapport d'aspect d'un TextureView avec Matrix comme ceci:

Matrix txform = new Matrix();
textureView.getTransform(txform);
txform.setScale((float) = videoWidth / viewWidth, (float) videoHeight / viewHeight);// aspect ratio
textureView.setTransform(txform); // apply matrix
0
jackz314

https://stackoverflow.com/a/49449986/9397052 il existe une solution à un problème similaire. Après avoir décidé d'une résolution, n'utilisez pas la fonction setTargetAspectRatio; à la place, vous ne devez utiliser que setTargetResolution. Ensuite, cela devrait fonctionner de la même manière.

0
Yavuz Bahçeci