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
Respuesta
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.
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.
Interesante, definitivamente se verá en esto. Gracias. – RBaarda
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).
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
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. –
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
- 1. C# Guardando imágenes enormes
- 2. Uso de varias imágenes en búfer en java
- 3. Dibujo de imágenes SVG en wxWidgets
- 4. Cómo deshabilitar el dibujo en el búfer de color
- 5. ¿Lidiar con imágenes enormes (potencialmente más de 30000x30000) en Python?
- 6. ¿Cómo transformar enormes archivos xml en Java?
- 7. Dibujo en Java usando Canvas
- 8. Creación colaborativa de dibujo pizarra aplicación
- 9. C# creación de desbordamiento de búfer
- 10. Librería de creación de gráficos de Javascript para datos enormes
- 11. Doble búfer en Java en Android con canvas y surfaceview
- 12. Píxeles de dibujo en WPF
- 13. Arrastrar y colocar imágenes en java
- 14. texto Dibujo con el contorno en Java
- 15. Trabajando con enormes archivos de texto en Java
- 16. StreamReader y búfer en C#
- 17. Dibujo de Android en SurfaceView y Canvas
- 18. Java XML Parser para archivos enormes
- 19. Alternativas de creación de imágenes de Python
- 20. Dibujo multiproceso en .NET?
- 21. Creación de búfer de profundidad de solo lectura
- 22. Carga rápida y dibujo de datos RGB en BufferedImage
- 23. Procesando archivos enormes en C#
- 24. OpenGL ES 2D - orden z, búfer de profundidad frente a dibujo en orden
- 25. administrando mis imágenes en Java
- 26. Arrastrar y soltar + dibujo personalizado en Android
- 27. Elegir entre Dibujo y Forma en WPF
- 28. Algoritmo de creación de imágenes HDR
- 29. Creación de XML dinámico en Java
- 30. Creación de imágenes NSI desde NSColor
¿Puedes publicar tu código? – eabraham