2013-03-22 20 views
8

Abbiamo creato una videocamera Android personalizzata Attività in cui un rettangolo è sovrapposto all'interno dell'anteprima della fotocamera e quando viene catturata la foto (alla pressione di un pulsante da ), vogliamo ritagliare il corrispondente area rettangolare dell'immagine finale. Il problema è che non abbiamo ancora capito come android mappa la schermata di anteprima per l'immagine finale.Mappatura anteprima fotocamera Android all'immagine finale

Abbiamo provato la seguente formula ma funziona solo in alcuni casi:

Siano X e Y le coordinate dello spigolo superiore sinistro del rettangolo come mostrato in anteprima della fotocamera.

Lascia che preview_width e preview_height siano la larghezza e l'altezza della telecamera anteprima. Questi sono ottenere utilizzando una funzione getBestPreviewSize(), che loop attraverso le dimensioni di anteprima supportate e seleziona quella più grande. Supponiamo che siano 1280 e 720.

Lascia che picture_width e picture_height siano la larghezza e l'altezza dell'immagine finale supportata dalla fotocamera. Per il nostro scopo, supponiamo che questo sia 1632 * 1224 (su un Sony Ericsson XPERIA corrisponde a 2 MP).

Vogliamo trovare x_map, y_map che sono xe y del rettangolo di ritaglio di l'immagine finale.

Poi dalla regola dell'analogia, la formula che abbiamo usato era:

x_map = picture_width * x/preview_width; y_map = picture_height * y/preview_height;

Tuttavia, questo non sembra funzionare in tutti i casi. Abbiamo scoperto che quando le dimensioni dello schermo del telefono sono simili alle dimensioni dell'anteprima, allora questa formula funziona quasi (approssimativamente, con un piccolo errore).

Tuttavia, per altri casi come il telefono Sony XPERIA, in cui le dimensioni dello schermo sono: larghezza: 480 e altezza: 854, la formula ha esito negativo.

Ad esempio, per x = 50, quindi x_map = 1632 * 50/1280 = 63,75 Tuttavia questo numero, come mostrato dalla zona rettangolo ritaglio della immagine finale, non realmente corrisponde al rettangolo nel area di anteprima. È è lontano. La nostra formula non tiene conto delle dimensioni dello schermo, sebbene la sperimentazione con la modifica per tenerne conto, non abbia prodotto risultati desiderabili nello .

abbiamo il sospetto che il mapping tra la dimensione di anteprima e l'immagine finale in qualche modo tiene conto delle dimensioni dello schermo, ma non hanno capito esattamente come, poiché non v'è alcuna documentazione su di esso e dopo aver ampiamente ricerca di risposte su nel web non è emerso nulla di rilevante. Riteniamo che sia presente un fattore di scala e proporzioni pari a che è necessario prendere in considerazione prima di applicare la regola dell'analogia, affinché la formula funzioni correttamente.

Conosci la formula corretta per quanto sopra?

risposta

1

In primo luogo, ottenere la dimensione dell'immagine più grande restituita da Camera.getSupportedPictureSizes - questa è la risoluzione nativa della fotocamera da cui è possibile determinare le proporzioni native. Qualsiasi dimensione dell'immagine o dimensione di anteprima con proporzioni diverse verrà ritagliata in base a `Matrix.ScaleToFit.CENTER '.

Vedere anche: https://stackoverflow.com/a/18159351/994834

Problemi correlati