2013-03-02 1 views
11

Meine App muss eine Reihe von Bildern mit hoher Auflösung anzeigen (ca. 1900 * 2200 px), Unterstützung Pinch Zoom. Aus Speicherfehlern zu vermeiden, ich plane Bild zu dekodieren vollen Umfang nutzen zu zeigen, indem sieAndroid Pinch Zoom großes Bild, Speicher effizient, ohne Detail zu verlieren

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

mit (Meine Ansicht verwendet i TouchImageView erstreckt ImageView)

So kann ich schnell Bild laden und Swipe reibungslos zwischen den Bildschirmen (Bilder). Allerdings, wenn ich Zoom zieche, verliert meine App Details wegen des skalierten Bildes. Wenn ich volle Bild laden, kann ich nicht schnell oder reibungslos wischen, ziehen nach dem Pinch-Zoom. Dann versuche ich nur volle Bild zu laden, wenn Benutzer Pinch-Zoom, aber ich kann immer noch nicht reibungslos Bild wegen der sehr großen Bild ziehen. Android-Galerie kann es sogar 8Mpx Bilder perfekt machen.

Jeder kann mir helfen. Vielen Dank im Voraus

+0

Vielleicht ist es das, was Sie suchen http://stackoverflow.com/questions/12022675/decode-part-of-jpeg-file – exebook

+0

Ich verstehe es nicht tief, aber vielleicht ist es nicht hilfreich für mich – Kiradev

+0

Die (samen) einzige Möglichkeit, riesige Jpegs schnell anzuzeigen, besteht darin, sie progressiv zu laden und nur die benötigten Teile zu dekodieren. Der übliche Weg, um auf jpeg zuzugreifen, ist libjpeg, daher wird im obigen Link erläutert, wie libjpeg verwendet wird, um Teile der JPEG-Datei progressiv zu erhalten, ohne sie als Ganzes zu dekodieren. – exebook

Antwort

3

Ich weiß, dass die Frage vor langer Zeit gestellt wurde, aber diese Antwort könnte anderen Leuten helfen, die damit kämpfen. Ich hatte genau das gleiche Problem. Sie sollten in Betracht ziehen, WebView zu verwenden und Ihr Bild damit zu laden, auch wenn es sich um ein lokales Image handelt. Zum Beispiel ein Bild in Vermögenswerte zu laden verwenden Sie die folgenden Schritte aus:

// 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); 

Ich gebe zu, dass es sehr merkwürdig ist WebView für eine solche Aufgabe zu verwenden, ist es die einzige Lösung, fand ich. Zumindest wirst du nie eine OOM-Ausnahme bekommen.

8

Sorry, eine alte Frage zu beantworten, aber ich habe gerade eine Bildansicht abgeschlossen, die ein Bild von Assets oder externem Speicher mit Subsampling zeigt, und lädt Kacheln mit höherer Auflösung aus dem Bild, während Sie zum Vergrößern zoomen. Als hohe Auflösung Bilddaten für Bereiche des Bildschirms werden nicht geladen, es sollten keine Speicherausnahmen vermieden werden.

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

+0

Ich habe gerade Ihre Bibliothek verwendet und den Quellcode davon angesehen. Du solltest einen Nobelpreis bekommen! –

+0

funktioniert für kleine Bildschirme (320x480), aber stürzt für große ab (1280x800) :(. Ich brauche wirklich eine Lösung für das Laden eines großen Bildes mit Zoom und Schwenken. Seufz ... – usman

+0

@usman Seit ich dies geschrieben habe ich gemacht einige Änderungen, um einige Randfälle zu beheben, in denen ein OOME noch geworfen werden konnte Mehrere Benutzer haben berichtet, dass die Ansicht verwendet wurde, um Bilder auf einem beliebigen Gerät mit einer Größe von 20.000x20.000 anzuzeigen –

Verwandte Themen