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