2012-05-03 7 views
6

Estoy trabajando en una aplicación que dibuja una matriz (utilizando Java 2D) que puede llegar a ser bastante grande, por ejemplo 30000 x 30000 píxeles. En este momento he experimentado un poco con BufferedImage, pero la creación de una Imagen Buffered tan grande provoca excepciones de memoria insuficiente, incluso al ampliar el montón. Ahora estaba pensando en dividir la imagen en varias imágenes/regiones, y cuando termine en una región determinada, escríbala en el disco y cree una nueva región/Imagen Buffered y continúe dibujando. Me interesan los pensamientos de otras personas sobre cómo manejarían esto. He estado alejado de Java por un tiempo así que cualquier ejemplo concreto es bienvenido.Creación y dibujo de imágenes enormes (en búfer) en Java

+0

¿Puedes publicar tu código? – eabraham

Respuesta

3

Contribuyo a un nuevo/pequeño proyecto de código abierto que puede ser muy adecuado para sus necesidades.

El proyecto es Glimpse. Su objetivo es ayudar en la construcción de visualizaciones de datos 2D en Java con un enfoque en el manejo de grandes conjuntos de datos y facilitando la capacidad de proporcionar interactividad en tiempo real para permitir una exploración de datos fácil.

Glimpse Head Map

Utiliza OpenGL para aprovechar las características de hardware de GPU modernas, como la memoria de texturas y shaders para lograr los objetivos anteriores. Entonces, si está configurado para usar Java2D, esto no funcionará para usted. Sin embargo, los paneles Glimpse se pueden colocar lado a lado con otros componentes Swing, por lo que es fácil colocarlos en su GUI Swing existente. La única advertencia es que necesitarás una tarjeta gráfica decente.

La imagen es un ejemplo de una gran matriz de datos cuya coloración se ajusta dinámicamente mediante la escala de colores de la derecha (los datos de la matriz se almacenan en una textura de GPU y la coloración dinámica se realiza a través de un sombreador personalizado) La fuente para este ejemplo es HeatMapExample.java. Hay muchos otros ejemplos como estos que proporcionan puntos de partida para trabajar con otras funciones de Glimpse.

Puede obtener más información al glimpse.metsci.com. Hay un video introductorio en la página principal, junto con Java WebStart examples. La fuente está alojada en GitHub.

+0

Interesante, definitivamente se verá en esto. Gracias. – RBaarda

1

si lo que desea es generar la imagen en el disco, y luego mirar pngj - que puede generar grandes imágenes PNG sin problemas porque escribe líneas de píxeles en el disco, ya que están disponibles. la API es un poco específica para PNG, pero no es demasiado compleja (podría ayudar leer un poco de fondo en el formato de imagen PNG antes de usarlo).

+0

Gracias por su respuesta. He analizado pngj, pero aún estoy averiguando cómo dibujarías, por ejemplo, una Imagen Buffered en el disco usando pngj. – RBaarda

+0

no lo harías Pensé que el problema era que la imagen almacenada en el búfer requiere demasiada memoria. pngj lo evita: escribe los píxeles directamente en el disco. lo siento si he entendido mal. –

+0

Lo siento por ser confuso, pero tienes razón, ese es el problema. Déjame ponerlo de esta manera, ¿cómo usarías la API Java 2D junto con PNGJ? – RBaarda

Cuestiones relacionadas