2012-05-03 2 views
6

Я работаю над приложением, которое рисует матрицу - с использованием Java 2D - которая может стать довольно большой, например 30000 x 30000 пикселей. В этот момент я немного экспериментировал с BufferedImage, но создание такого огромного BufferedImage вызывает исключения из памяти даже при увеличении кучи. Теперь я думал о том, чтобы разделить изображение на несколько изображений/регионов, и когда я закончил работу в определенном регионе, напишите его на диск и создайте новый регион/BufferedImage и продолжите рисование. Мне интересны мысли других людей о том, как они справятся с этим. Некоторое время я был вне Java, поэтому любые конкретные примеры приветствуются.Создание и рисование огромных (буферизованных) изображений в Java

+0

Можете ли вы разместить свой код? – eabraham

ответ

3

Я вношу свой вклад в создание нового/небольшого проекта с открытым исходным кодом, который может быть очень хорошо подходит для ваших нужд.

Проект Glimpse. Он призван помочь в построении 2D-визуализации данных в Java с уделением особого внимания обработке больших наборов данных и упрощению интерактивности в режиме реального времени, позволяющей легко исследовать данные.

Glimpse Head Map

Он использует OpenGL, чтобы воспользоваться аппаратными особенностями современных графических процессоров, таких как память текстуры и шейдеры для достижения вышеуказанных целей. Поэтому, если вы используете Java2D, это не сработает для вас. Тем не менее, панели Glimpse могут быть размещены бок о бок с другими компонентами Swing, поэтому легко попасть в ваш существующий графический интерфейс Swing. Единственное, что вам нужно, - это достойная видеокарта.

Изображение представляет собой пример большой матрицы данных, окраска которой динамически регулируется с помощью цветовой шкалы справа (данные матрицы хранятся в текстуре графического процессора, а динамическая перекраска выполняется с помощью пользовательского шейдера). Источником для этого примера является HeatMapExample.java. Существует множество других примеров, которые дают начало для работы с другими функциями Glimpse.

Узнать больше об glimpse.metsci.com. На первой странице есть встроенное видео, а также Java WebStart examples. Источник размещен по адресу GitHub.

+0

Интересно, обязательно изучите это. Благодарю. – RBaarda

1

, если вы просто хотите создать образ на диске, а затем посмотреть на pngj - он может генерировать больших PNG изображения без каких-либо проблем, так как он пишет строку пикселей на диск, поскольку они доступны. api немного png-specific, но он не слишком сложный (он может помочь прочитать немного фона в формате png-изображения, прежде чем использовать его).

+0

Спасибо за ваш ответ. Я просмотрел pngj, но я все еще выясняю, как вы могли бы нарисовать, например, BufferedImage на диске, используя pngj. – RBaarda

+0

вы бы этого не сделали. Я думал, проблема в том, что буферизованное изображение занимает слишком много памяти? pngj избегает этого - вы пишете пиксели непосредственно на диск. извините, если я неправильно понял. –

+0

Извините за то, что вы сбиваете с толку, но вы правы в этом. Позвольте мне сказать так: как вы будете использовать Java 2D api вместе с PNGJ? – RBaarda

Смежные вопросы