Lädt große Bilder von der URL in Streifen, die verhindern, dass das gesamte Bild in den RAM geladen wird

8

Ich suche nach einer Bibliothek oder einer Idee, wie ich ein Bild nach Teilen von der Platte oder einer URL direkt auf die Platte laden kann, dann wieder in Teilen auf den RAM. Also die zwei Möglichkeiten, die ich sehen kann, ist das Laden des gesamten Bildes auf die Festplatte durch Lesen und Schreiben von der URL direkt mit dem RAM nur für den Puffer, dann wenn das Bild auf der Festplatte ist einige Bitmaps von nur Teile des Bildes, auf diese Weise lade ich NICHT alles und setze diese in ein ListView .

Das Problem ist, dass ich es mit extrem langen Bildern zu tun habe (10K + Pixel lang mit einer Breite von 4-600) und sie eine Menge Ram hochholen, wenn sie alle in einer Bitmap geladen werden. Ich kann sie nicht einfach so verkleinern, wie es das Tutorial von Google android im Umgang mit großen Bitmaps tut, da dies zu einer Breite führt, die zu klein ist, um damit fertig zu werden. Wenn ich also irgendwie kleine Bitmap-Splitter auf der Platte erzeugen kann, kann ich sie verwenden, indem ich sie in ListView lade, was verhindert, dass das Bild als Ganzes in Ram geladen wird.

Im Moment breche ich die langen Bilder aus einer Bitmap in Splitter und ich merke, dass das nicht wirklich das erreicht, was ich versuche zu tun, da das ganze Bild in eine Bitmap im Speicher geladen wird und dann aufgelöst wird GC (Also benutze ich sowieso die volle Menge Ram). Ich teste auf einem neuen Top-Modell der Android-App und die App funktioniert gut, aber die Größe des Heapspeicher erreicht 80mb + mit den größeren Bildern vorübergehend im RAM, da es die Bitmap zusammenbricht und dies ein Problem mit Geräten mit niedrigeren Heap-Grenzen sein wird

    
Osman 03.06.2013, 02:06
quelle

4 Antworten

2

Sie können versuchen, diese Klasse zu verwenden, Unterstützung von 2.3 Ссылка

    
Binh Tran 09.06.2013, 11:21
quelle
1

Wenn Sie Java verwenden, können Sie mit InputStreamReader und OutputStreamWriter arbeiten. Methode lesen () akzeptiert den Puffer als einen der Parameter, seine Länge kann alles sein, was geeignet ist. Natürlich können Sie für jeden geschriebenen Puffer eine neue Datei erstellen.

Ist es das, wonach Sie suchen?

Bearbeiten naja ist es nicht. Haben Sie dieses seltsame Problem mit dem Arbeitsspeicher beim Laden eines Bildes in ein Bitmap-Objekt gesehen?

    
tomasb 03.06.2013 02:18
quelle
0
  1. Wenn Sie die Kontrolle über den Server haben, von dem Sie Daten abrufen, werfen Sie ein anderes Feld in Ihre Antwort ein, sodass ein Thumbnail / ein kleineres Bild zurückgegeben wird. Der Server kann dann die benötigten Thumbnails für Sie generieren, ohne dass Sie sich darum kümmern müssen.

  2. Die Bitmaps im laufenden Betrieb zu decodieren, ist meistens teuer. Wenn Sie auf dem Server nichts ändern können, laden und speichern Sie die Bilder und generieren Sie nach dem Speichern die entsprechenden Miniaturbilder und speichern Sie sie ebenfalls . Verwenden Sie in Ihrer Liste die Miniaturansichten. Speichern Sie außerdem die Informationen darüber, welche Bilder zwischengespeichert wurden und welche Miniaturbilder Sie bereits haben. Dies mag nach einer Menge Arbeit aussehen, aber je nach Anwendungsfall kann dies ein besserer Ansatz für große Bilder sein.

Problem mit der Verkleinerung? Nun, Sie können eine Art Logik entwickeln, um Thumbnails zu erzeugen, basierend auf der Originalgröße des Bildes. Für längere (vertikal lange Bilder) können Sie BitmpapRegionDecoder ( Ссылка ) wie @Binh Tran vorgeschlagen hat.

    
Kumar Bibek 11.06.2013 07:04
quelle
0

Versuchen Sie vielleicht, das Bild zu codieren, um die Größe klein zu halten.

    
COLD ICE 12.06.2013 01:43
quelle