Как создать большой файл изображения из множества плиток в Java? - PullRequest
7 голосов
/ 05 августа 2010

Моя программа генерирует изображения размером 10 x 10 плиток размером 3000 x 3000 пикселей по одному (в настоящее время сохраняется в 100 файлах с именем image_x_y.jpg)

Я хочу собрать эти 100 изображений в одно большое изображение без загрузки всегов памяти.Моя цель - создать один большой файл изображения размером 30 000 * 30 000 пикселей.

Я ищу способ сделать это без с использованием JAI (который не может быть установлениз общедоступных репозиториев maven я не понимаю почему)

Есть ли способ сделать это с чистым java2D?Или существует другая библиотека, способная справиться с этим?

Моя оригинальная идея состояла в том, чтобы создать очень большое буферизованное изображение из DataBuffer, сохраненного в файле на диске.Но я не уверен, что это возможно.Кто-нибудь когда-нибудь делал это?

Ответы [ 3 ]

6 голосов
/ 05 августа 2010

Я хочу собрать эти 100 изображений в одно большое изображение, не загружая все в память.Моя цель - создать один большой файл изображения размером 30 000 * 30 000 пикселей.

Я считаю, что в JAI есть класс, который это делает.Какие бы проблемы у вас ни возникали с интеграцией JAI в ваш проект, я бы продолжил с этим, а не накатывал вашу собственную версию.В Java2D нет ничего подобного.

Моя оригинальная идея состояла в том, чтобы создать очень большое буферизованное изображение из DataBuffer, сохраненного в файле на диске.Но я не уверен, что это возможно.Кто-нибудь когда-нибудь делал это?

Да, я написал неполную реализацию этого.Он состоит из

  • A DataBuffer, который поддерживается массивом ByteBuffer вместо массива (если буфер является прямым, его можно сопоставить с файлом).
  • AWritableRaster аналогично стандартным растрам, но использую мою реализацию DataBuffer (стандартные растры в чит-коде JDK, содержащие ссылку на резервный массив. В случае прямого ByteBuffer массива нет, поэтому, к сожалению, вы должныповторно реализовать большинство Raster методов.)

Я не рекомендую расширять SampleModel, потому что ваш класс не будет работать с растрами JDK (различные методы в Java2D, включая переключатель методов фабрики Raster)на типе SampleModel при условии, что он один из стандартных. Плохой дизайн ИМХО, но с этим мало что можно поделать, кроме как по той же схеме.)

1 голос
/ 05 августа 2010

Если у вас возникли проблемы с использованием ресурса из общедоступного репозитория maven, вы можете использовать Nexus , прокси-сервер maven и вручную добавить JAI-файл туда (и добавить его в свой список репозиториев).

Преимущество выбора этого решения состоит в том, что у вас будет JAI, и у вас будет стандартный способ использовать ресурсы non-maven (все библиотеки javax) способом maven.

Не возитесь с этим вокруг себя, вопрос обработки изображений является сложным из-за того, что все сжатие связано с обработкой BMP на диске, учитывая, что размеры вашего изображения (около 100 * 30 МБ = 3 ГБ), вероятно, не оптимальны и не быстры.

1 голос
/ 05 августа 2010

Я не знаю, возможно ли это без загрузки всего в память.Вы можете записать все ваши изображения в несжатый BMP-файл, а затем использовать какой-либо внешний инструмент для преобразования его в формат JPG.

...