Vorschau der Android Kamera Vorschau auf das endgültige Bild

8

Wir haben eine benutzerdefinierte Android-Kamera-Aktivität erstellt, in der sich ein Rechteck befindet überlagert in der Kameravorschau und wenn das Foto aufgenommen wird (im Drücken eines Knopfes) wollen wir den entsprechenden Rechteckbereich zuschneiden des endgültigen Bildes. Das Problem ist, dass wir noch nicht herausgefunden haben, wie Android funktioniert Ordnet den Vorschaubildschirm dem endgültigen Bild zu.

Wir haben die folgende Formel ausprobiert, funktionieren aber nur in einigen Fällen:

Seien x und y die Koordinaten der oberen linken Ecke des Rechtecks ​​als in der Kameravorschau angezeigt.

Lassen Sie preview_width und preview_height die Breite und Höhe der Kamera sein Vorschau. Diese werden mithilfe einer getBestPreviewSize () - Funktion abgerufen, die eine Schleife ausführt durch die unterstützten Vorschaugrößen und wählt die größere aus. Nehmen wir an, sie sind 1280 und 720.

Lassen Sie picture_width und picture_height die Breite und Höhe des Finales sein Bild wie von der Kamera unterstützt. Für unseren Zweck, nehmen wir an, das ist 1632 * 1224 (bei einem Sony Ericsson XPERIA entspricht dies den 2 MP).

Wir wollen x_map, y_map finden, die das x und y des Beschnittrahmens von sind das endgültige Bild.

Nach der Analogieregel lautet die Formel:

x_map = Bildbreite * x / preview_width; y_map = Bildhöhe * y / preview_height;

Dies scheint jedoch nicht in allen Fällen zu funktionieren. Wir haben herausgefunden, dass wenn Die Bildschirmgröße des Telefons entspricht der Vorschaugröße, dann diese Formel funktioniert fast (ungefähr, mit einem kleinen Fehler).

Aber für andere Fälle wie das Sony XPERIA Telefon, wo die Bildschirmmaße sind: Breite: 480 und Höhe: 854, die Formel schlägt fehl.

Beispiel: Für x = 50 ist x_map = 1632 * 50/1280 = 63,75 Allerdings ist diese Zahl, wie durch den Rechteckbereich angezeigt, vom Finale abgeschnitten Bild entspricht nicht wirklich dem Rechteck im Vorschaubereich. Es ist weg. Unsere Formel berücksichtigt nicht die Bildschirmdimensionen, obwohl das Experimentieren mit dem Modifizieren, um sie zu erklären, nicht hat produziert irgendwelche wünschenswerten Ergebnisse.

Wir vermuten, dass die Zuordnung zwischen der Vorschaugröße und dem endgültigen Bild irgendwie ist berücksichtigt die Bildschirmabmessungen, hat aber nicht herausgefunden, wie genau, da es keine Dokumentation darüber gibt und nach gründlicher Suche Antworten im Internet gab es nichts Relevantes. Wir glauben, dass es ein bestimmter Skalenfaktor und Seitenverhältnis, die wir berücksichtigen müssen bevor Sie die Regel der Analogie anwenden, damit die Formel gut funktioniert.

Kennen Sie eine korrekte Formel für das oben genannte?

    
Fotis Hantzis 22.03.2013, 23:00
quelle

1 Antwort

1

Zunächst erhalten Sie die größte Bildgröße, die von Camera.getSupportedPictureSizes zurückgegeben wird. Dies ist die native Auflösung Ihrer Kamera, aus der Sie das native Seitenverhältnis ermitteln können. Jede Bildgröße oder Vorschaugröße mit einem anderen Seitenverhältnis wird gemäß "Matrix.ScaleToFit.CENTER" abgeschnitten.

Siehe auch: Ссылка

    
goto10 12.08.2013 02:00
quelle