Die Vorschau von Android Camera2 ist gestreckt
Ich versuche, die Camera2-API zu lernen, und habe eine einfache Kamera-App nur zum Aufnehmen von Bildern erstellt. Das Problem besteht jedoch darin, dass die Vorschau für einige Auflösungen gestreckt ist. Ich habe verschiedene Beiträge durchgesehen und alle haben darauf hingewiesen, dass mein Seitenverhältnis möglicherweise falsch ist, aber ich habe das von Google empfohlene AutoFitTextureView mit dem richtigen Seitenverhältnis verwendet, obwohl meine Vorschau gestreckt ist. Ich habe einige Open-Source-Kamera-Apps aus dem Playstore heruntergeladen und einige hatten auch das gleiche Problem mit meiner Frontkamera (AUSSER OFFENE KAMERA), aber der lustige Teil ist, dass ich dieselbe App auf einem anderen Gerät verwendet habe und die Vorschau absolut perfekt war. Also entschied ich mich schließlich, meine App mit verschiedenen Auflösungen zu testen und die Ergebnisse zu beobachten, aber ich konnte kein Muster finden. Kann mir bitte jemand helfen, einen Sinn daraus zu machen?
my device display size is 720x1280
Front camera results:
SurfaceTexture AutoFitTextureView Result
buffer size size
2576x1932 720x960 Normal
2560x1440 720x1280 Normal
2048x1536 720x960 Normal
2048x1152 720x1280 Normal
1920x1920 720x720 Normal
1920x1080 720x1280 Normal
1440x1080 720x960 Horizontally Stretched
1280x720 720x1280 Horizontally Stretched
1072x1072 720x720 Normal
960x720 720x960 Normal
720x480 720x1080 Horizontally Stretched
640x480 720x960 Horizontally Stretched
352x288 720x880 Normal
320x240 720x960 Normal
256x144 720x1280 Horizontally Stretched
176x144 720x880 Normal
Antworten
Camera2 ist als Anfänger sehr schwer zu lernen. Erwägen Sie die Verwendung von Kamerabibliotheken, die die meisten Teile ausführen. Hier ist eine der besten, die ich gefunden habe:https://camerakit.io/docs. Es ist wirklich einfach und wird alle Probleme lösen, mit denen Sie gerade konfrontiert sind.
(Beachten Sie, dass ich dieses Projekt nicht besitze und es sowieso nicht bewerbe. Ich habe die camera2-API ausprobiert und es ist wirklich schwierig, weshalb ich eine einfachere Lösung vorgeschlagen habe.
Es ist tatsächlich möglich, dass dies ein Gerätefehler ist - die Kameraimplementierung wird von der vollen Sensorgröße aus falsch skaliert. Es kommt häufiger bei ungewöhnlichen Größen vor, die die meisten Apps nicht verwenden.
In Ihrem Fall ist es wahrscheinlich, dass 1440 x 1080 von einem Teil der Kamera-Pipeline wie 1920 x 1080 behandelt werden, was zu einer Dehnung führt. Manchmal kann dies behoben werden, indem eine zweite Ausgabe (z. B. JPEG) mit einer anderen Auflösung (oder manchmal sogar dieselbe) hinzugefügt wird.
Natürlich ist es immer noch möglich, dass Ihr Code (oder die AutoFitTextureView) einen logischen Fehler enthält. Es ist jedoch schwierig, nützliche Ratschläge zu geben - es geht darum, das gesamte Layout zu überprüfen und die Mathematik Schritt für Schritt zu skalieren.
Sie können auch die offizielle Kamera-Support-Bibliothek von Google, CameraX , ausprobieren . Es befindet sich in der Beta-Phase und eignet sich für grundlegende Anwendungsfälle wie Vorschau, Standbildaufnahme und Bildanalyse.