2012-02-20 11 views
17

Voglio decodificare un'immagine dalla scheda SD con BitmapFactory.decodeFile (percorso, opzioni).
Desidero anche ridimensionare le immagini con dimensioni superiori a 2048x2048 pixel fino a un massimo di 2048x2048 (mantenendo le proporzioni).
Potrei farlo manualmente dopo aver ottenuto la bitmap, ma ciò richiederebbe l'allocazione di una grande quantità di byte oltre a quelli già allocati.
Come devo impostare il mio oggetto BitmapFactory.Options per ottenere quell'effetto?
GrazieAndroid come ridimensionare un'immagine con BitmapFactory Opzioni

risposta

10

Utilizzare BitmapFactory.Options.inSampleSize quando si carica per la prima volta l'immagine per ottenere la dimensione più vicina possibile alla dimensione desiderata, quindi utilizzare Bitmap.createScaledBitmap per ridimensionare alla dimensione esatta desiderata.

C'è del codice per questo in this answer.

3

si può provare qualcosa di simile:

int imageWidth, imageHeight; 

Bitmap result = Bitmap.createScaledBitmap(bitmapPicture, 
         imageWidth, imageHeight, false); 

Qui puoi aggiungere la tua larghezza e l'altezza. bitmapPicture è l'oggetto di Bitmap. Fammi sapere se ti è di aiuto.

+1

Come ho già detto, sto cercando di evitare di dover allocare altri 2048x2048 pixel, ma fare in modo che BitmapFactory esegua automaticamente questo, perché sono molto corto sulla memoria. Il tuo metodo assegna solo una nuova bitmap che non è ciò che voglio. Grazie per la risposta però. – saarraz1

5

Iniziare impostando inJustDecodeBounds a true nel tuo Options, questo ti darà la dimensione dell'immagine, senza caricare alcuno dei dati di immagine.
Se la dimensione dell'immagine è inferiore alla dimensione massima, quindi caricarla come al solito.
Se invece è troppo grande, utilizzare inSampleSize per leggere una bitmap più piccola.

Nota: non credo che la decodifica fa alcun filtro quando si utilizza l'inSampleSize, per cui si potrebbe perdere alcuni dettagli, ma come la dimensione dell'immagine è così grande (2048 px) Non credo che questo sarà causare problemi.