Моя программа производит изображения мозаик 3000x3000 пикселей 10 x 10, один за другим (в настоящее время сохраняемый в 100 названных файлов image_x_y.jpg
)
Я хочу собрать эти 100 изображений в одно большое изображение, не загружая все в памяти. Моя цель состоит в том, чтобы создать один большой файл изображения, 30'000 * 30'000 пикселей.
Я ищу способ сделать это, не используя JAI (который не может быть установлен из общедоступных репозиториев знатока, я не понимаю почему),
Существует ли способ сделать это с чистым java2D? Или другая библиотека существует, способная обработать это?
Моя исходная идея состояла в том, чтобы создать очень большое буферизованное изображение от DataBuffer, поддержанного в файл на диске. Но я не уверен, что это возможно. Кто-либо когда-либо делал это?
Я хочу собрать эти 100 изображений в одно большое изображение, не загружая все в память. Моя цель - создать один большой файл изображения размером 30 000 * 30 000 пикселей.
Я считаю, что в JAI есть класс, который этим занимается. Какие бы проблемы у вас ни возникали при интеграции JAI в ваш проект, я бы упорно продолжал это делать, а не выпускал вашу собственную версию. В Java2D ничего подобного нет.
Моя первоначальная идея заключалась в том, чтобы создать очень большое буферизованное изображение из буфера данных с резервной копией в файл на диске. Но я не уверен, что это возможно. Кто-нибудь когда-либо делал это?
Да, я написал неполную реализацию этого. Он состоит из
DataBuffer
, который поддерживается ByteBuffer
вместо массива (если буфер прямой, он может быть отображен в файл). WritableRaster
, подобный стандартным растрам, но использующий мою реализацию DataBuffer
(стандартные растры в читерской программе JDK, содержащие ссылку на резервный массив. В случае прямого ByteBuffer
, поэтому, к сожалению, вам придется повторно реализовать большинство методов Raster
.) Я не рекомендую расширять SampleModel
, потому что ваш класс не будет работать с растрами JDK (различные методы в Java2D, включая фабричные методы Raster
, включают тип SampleModel
, предполагая, что это один из стандартных. Плохой дизайн IMHO, но вы мало что можете с этим поделать, кроме следуйте той же схеме.)
Если у вас проблемы с использованием ресурсов из публичного maven-репозитория, вы можете использовать Nexus, maven proxy, и вручную добавить туда JAI jar (и добавить его в список репозиториев).
Преимущество этого решения в том, что у вас будет JAI и стандартный способ использовать не-maven ресурсы (все библиотеки javax) в maven.
Не возитесь с этим самостоятельно, вопрос визуализации сложен из-за всех вовлеченных сжатий, и работа с BMP на диске, учитывая ваши размеры изображений (около 100 * 30MB = 3GB), вероятно, не является оптимальной и быстрой.
Я не знаю, возможно ли это без загрузки всего в память. Вы можете выгрузить все свои изображения в несжатый BMP, а затем использовать какой-либо внешний инструмент для преобразования его в jpg.