Хранение большого изображения в Java - учебник

Мне нужно сохранить большое изображение на диске - настолько большое, что это приводит к ошибкам памяти (например, 10000x10000 px). Предполагается, что это мозаика, и я храню плитку в памяти как BufferedImage. Я читал кое-что о том, что класс TiledImage может работать только с частью изображения, а остальные хранятся на диске, но я не нашел простого примера того, как это сделать?Не могли бы вы указать мне или создать учебник для чайников о том, как хранить большое изображение на диске, не имея всего этого в памяти? Например, "создать большое изображение прямо на диске, как это:", "получить доступ к его части и сохранить данные в нем, как это:" или как оно работает.

Я знаю, что об этом уже спрашивали пару раз, но я прочитал все это и много гуглил, но все еще не нашел целый рабочий (или понятный) пример. Может быть, это языковой барьер, или я просто глуп в таких вещах, в любом случае, помогите, пожалуйста:)

4 ответа

Решение

Вы проверили DiskMemImage, из их документации:

Этот класс служит той же цели, что и стандартный класс TiledImage JAI, а именно: записываемое изображение, которое может вместить различные типы данных, необязательный ColorModel и данные, размещенные в листах. Однако, в отличие от TiledImage, DiskMemImage использует диск, а также память, что позволяет обрабатывать очень большие изображения в ограниченном объеме памяти.

Вы можете взглянуть на PNGJ, я создал эту библиотеку для похожего сценария.

Простой способ решить OutOfMemoryError в Java - увеличить максимальный размер кучи с помощью параметров JVM.

Я бы просто увеличил вашу максимальную память, это намного проще. Попробуйте это с -Xmx1g в командной строке.

В использовании плиток нет магии. Вы просто разбиваете свое изображение на более мелкие, когда сшиваете вместе на экране, чтобы оно выглядело как большое. например, карты Google делают это.

Другие вопросы по тегам