Хранение большого изображения в Java - учебник
Мне нужно сохранить большое изображение на диске - настолько большое, что это приводит к ошибкам памяти (например, 10000x10000 px). Предполагается, что это мозаика, и я храню плитку в памяти как BufferedImage. Я читал кое-что о том, что класс TiledImage может работать только с частью изображения, а остальные хранятся на диске, но я не нашел простого примера того, как это сделать?Не могли бы вы указать мне или создать учебник для чайников о том, как хранить большое изображение на диске, не имея всего этого в памяти? Например, "создать большое изображение прямо на диске, как это:", "получить доступ к его части и сохранить данные в нем, как это:" или как оно работает.
Я знаю, что об этом уже спрашивали пару раз, но я прочитал все это и много гуглил, но все еще не нашел целый рабочий (или понятный) пример. Может быть, это языковой барьер, или я просто глуп в таких вещах, в любом случае, помогите, пожалуйста:)
4 ответа
Вы проверили DiskMemImage, из их документации:
Этот класс служит той же цели, что и стандартный класс TiledImage JAI, а именно: записываемое изображение, которое может вместить различные типы данных, необязательный ColorModel и данные, размещенные в листах. Однако, в отличие от TiledImage, DiskMemImage использует диск, а также память, что позволяет обрабатывать очень большие изображения в ограниченном объеме памяти.
Вы можете взглянуть на PNGJ, я создал эту библиотеку для похожего сценария.
Простой способ решить OutOfMemoryError в Java - увеличить максимальный размер кучи с помощью параметров JVM.
Я бы просто увеличил вашу максимальную память, это намного проще. Попробуйте это с -Xmx1g
в командной строке.
В использовании плиток нет магии. Вы просто разбиваете свое изображение на более мелкие, когда сшиваете вместе на экране, чтобы оно выглядело как большое. например, карты Google делают это.