Ich habe Java-Programm, das eine JPEG-Datei von der Festplatte liest und es als Hintergrundbild für verschiedene andere Dinge verwendet. Das Bild selbst ist wie so in einem BufferImage
Objekt gespeichert:Machen Sie ein BufferedImage verwenden weniger RAM?
BufferedImage background
background = ImageIO.read(file)
Dies funktioniert gut - das Problem ist, dass das BufferedImage
Objekt selbst ist enorm. Zum Beispiel wird eine 215k-JPEG-Datei zu einem BufferedImag
e-Objekt, das 4 MB groß ist und sich ändert. Die fragliche App kann einige ziemlich große Hintergrundbilder geladen haben, aber während die JPEGs nie mehr als ein oder zwei Megabyte sind, kann der Speicher, der zum Speichern der BufferedImage
verwendet wird, 100 MB schnell überschreiten.
Ich nehme an, das alles ist, weil das Bild im RAM als rohe RGB-Daten gespeichert wird, nicht komprimiert oder in keiner Weise optimiert.
Gibt es eine Möglichkeit, das Bild im RAM in einem kleineren Format speichern zu lassen? Ich bin in einer Situation, in der ich auf der CPU-Seite mehr Kapazität als RAM habe, so dass ein leichter Performance-Hit, um die Größe des Bildobjekts in Richtung der JPEG-Komprimierung zurückzubekommen, es wert wäre.
lollipop: Tut mir leid, aber * a) * Sie antworten nicht (daher die -1) und * b) * Ihr Kommentar, dass es * irrelevant * ist ** HOCH ** irreführend (zu schlecht Ich kann nicht geben -2). Das OP-Problem besteht offensichtlich darin, dass die JPEG-Komprimierung bei einer Art von Bild ** SEHR effizient ist, und daher ist er überrascht, die komprimierte JPEG/unkomprimierte (A) RGB-Größendifferenz zu sehen. Sie helfen nicht in irgendeiner Weise. – SyntaxT3rr0r
Es ist irrelevant, wie groß die Quelldatei ist. Genauso wie der Versuch, eine 1 GB TXT-Datei zu lesen, die gezippt wurde, ist irrelevant für die Größe der ZIP-Datei. Die Größe der Dateigröße der einzelnen Datenträger hat nichts mit der Speichermenge zu tun, die zum Anzeigen des unkomprimierten Bilds benötigt wird. –
die Antwort ist da, Größe ändern Sie das Bild zu kleineren Abmessungen –