У меня есть java-программа, которая читает jpeg-файл с жесткого диска и использует его в качестве фонового изображения для других целей. Само изображение хранится в объекте BufferImage
вот так:
BufferedImage background
background = ImageIO.read(file)
Это прекрасно работает — проблема в том, что сам объект BufferedImage
огромен. Например, файл jpeg размером 215 КБ становится объектом BufferedImag
e размером 4 мегабайта и изменением. Рассматриваемое приложение может иметь загруженные довольно большие фоновые изображения, но в то время как jpeg никогда не превышает мегабайт или два, память, используемая для хранения BufferedImage
, может быстро превысить 100 мегабайт.
Я предполагаю, что все это связано с тем, что изображение хранится в оперативной памяти как необработанные данные RGB, не сжатые и не оптимизированные каким-либо образом.
Есть ли способ сохранить изображение в оперативной памяти в меньшем формате? Я нахожусь в ситуации, когда у меня больше слабины на стороне ЦП, чем на ОЗУ, поэтому небольшой удар по производительности, чтобы вернуть размер объекта изображения обратно к сжатию jpeg, стоил бы того.