2013-03-02 17 views
11

La mia app deve visualizzare un numero di immagini ad alta risoluzione (circa 1900 * 2200 px), supporta zoom pizzico. Per evitare Fuori errore di memoria Ho intenzione di decodificare l'immagine per mostrare a schermo intero utilizzandoZoom pizzico Android grande immagine, memoria efficiente senza perdere i dettagli

options.inSampleSize = scale (scale was calculated as Power of 2 as Document) 

(mia opinione che ho usato è TouchImageView estende di ImageView)

così posso caricare rapidamente immagini e scorrere senza intoppi tra le schermate (immagini). Tuttavia, quando pizzico lo zoom, la mia app perde i dettagli a causa dell'immagine ridimensionata. Se carico l'immagine completa, non riesco a caricarla rapidamente o senza intoppi, trascinare dopo aver pizzicato lo zoom. Quindi provo a caricare l'immagine completa solo quando l'utente inizia a zoomare con il pizzico, ma non riesco ancora a trascinare un'immagine uniforme a causa dell'immagine molto grande. La galleria Android può farlo perfettamente anche con immagini da 8 MPX.

Chiunque può aiutarmi. Grazie in anticipo

+0

Forse è questo che state cercando http://stackoverflow.com/questions/12022675/decode-part-of-jpeg-file – exebook

+0

Non capisco a fondo, ma forse non è utile per me – Kiradev

+0

L'apparente (apparentemente) unico modo per visualizzare velocemente enormi Jpeg è caricarli progressivamente e decodificare solo le parti richieste. Un modo comune per accedere a jpeg è libjpeg, quindi il link sopra discute come usare libjpeg per ottenere progressivamente parti del file jpeg senza decodificarlo nel suo insieme. – exebook

risposta

3

So che la domanda è stata posta molto tempo fa ma questa risposta potrebbe aiutare le altre persone alle prese con questo. Ho avuto esattamente lo stesso problema. Si dovrebbe prendere in considerazione l'utilizzo di WebView e caricare l'immagine con essa, anche se si tratta di un'immagine locale. Ad esempio per caricare un'immagine in attivi uso il seguente:

// Get a WebView you have defined in your XML layout  
WebView webView = (WebView) findViewById(R.id.webView1); 
// Fetch the picture in your folders using HTML    
String htmlData = "<img src=\"my_image.png\">"; 
webView.loadDataWithBaseURL("file:///android_asset/", htmlData, "text/html", "utf-8", null); 
// Activate zooming 
webView.getSettings().setBuiltInZoomControls(true); 

ammetto che è molto strano di utilizzare WebView per un tale compito, è l'unica soluzione che ho trovato. Almeno non otterrai mai un'eccezione OOM.

8

Mi spiace rispondere a una vecchia domanda, ma ho appena completato una visualizzazione immagine che mostra un'immagine da risorse o memoria esterna con sottocampionamento e carica più tessere a risoluzione più alta dall'immagine mentre pizzica per ingrandire. Come ad alta risoluzione i dati di immagine per le aree dello schermo non sono caricati dovrebbero evitare eccezioni di memoria insufficiente.

https://github.com/davemorrissey/subsampling-scale-image-view

+0

Ho appena usato la libreria e visualizzato il codice sorgente. Dovresti ottenere un premio Nobel! –

+0

funziona per schermi di piccole dimensioni (320x480), ma si blocca per quelli di grandi dimensioni (1280x800) :(. Ho davvero bisogno di una soluzione per caricare un'immagine grande con zoom e panning ... – usman

+0

@usman Da quando ho scritto questo ho fatto alcune modifiche per correggere alcuni casi limite in cui è ancora possibile lanciare un OOME. Diversi utenti hanno segnalato di utilizzare la vista per visualizzare immagini grandi come 20.000 x 20.000 su qualsiasi dispositivo .. –