Pregunta

Me gustaría exportar la imagen en mi JPanel a un archivo de gráficos vectoriales para que pueda editarse e imprimirse a una resolución más alta que la pantalla. Esencialmente quiero que se llame a su función paint () con un gráfico de destino que guarde los comandos de dibujo en un archivo de gráficos vectoriales.

¿Qué es una forma buena y sencilla de hacer esto? ¿Qué bibliotecas se recomiendan? ¿Qué formato vectorial sería mejor y por qué?

¿Fue útil?

Solución

Eche un vistazo a El paquete Graphics2D de Java EPS .

  

Muchos programas Java usan Graphics2D para dibujar cosas en la pantalla, y aunque es fácil guardar la salida como un archivo png o jpeg, es un poco más difícil exportarlo como un EPS para incluirlo en un documento o papel.

     

Este paquete hace que todo el proceso sea extremadamente fácil, ya que puedes usar el objeto EpsGraphics2D como si fuera un objeto Graphics2D. La única diferencia es que todos los métodos implementados crean una salida EPS, lo que significa que los diagramas que dibuja se pueden redimensionar sin que se vea uno de los bordes irregulares que puede ver al redimensionar imágenes basadas en píxeles, como los archivos JEPG y PNG.

Otros consejos

Apache Batik le permitirá pintar a una implementación especializada de un objeto Graphics2D y luego exportar como un archivo de gráficos vectoriales escalable (.svg). Luego puede verlo / procesarlo / imprimirlo usando un navegador habilitado para SVG (Firefox lo manejará de forma nativa, ISTR, IE y otros pueden usar complementos).

Vea el SVGGraphics2D objeto ( proceso documentado aquí )

El EPS de Java mencionado por Pierre se ve bien, pero si no lo está, también le gustaría ver FreeHEP Gráficos vectoriales . Escrito para permitir la reutilización de Java en el campo de Física de alta energía, incluye un paquete de gráficos vectoriales, realizado a través de una implementación de Graphics2D. Lo hemos utilizado para exportar EPS con mucho éxito durante varios años.

Puedo recomendar la biblioteca VectorGraphics2D (LGPL). Aunque no es compatible con todas las funciones de Graphics2D, lo usé con éxito para mi proyecto. Proporciona implementaciones de java.awt.Graphics2D para varios formatos de archivos vectoriales. Simplemente exporta todas las operaciones de pintura a archivos EPS, SVG o PDF.

Bibliotecas adicionales para personas con el mismo requisito:

Ambos de estos GPLv3 y bien probados a través del uso extensivo en JFreeChart y Orson Charts .

FreeHEP parece funcionar bastante bien, aunque parece que ya no se mantiene y sus errores y páginas de foros ya no existen. Con solo un puñado de líneas obtiene un cuadro de diálogo emergente que puede guardar cualquier componente en una variedad de formatos de imagen escalables y regulares. Tenemos algunas imágenes desafiantes, usando canal alfa, texto girado, áreas delimitadas por curvas, y se guardaron perfectamente, mucho mejor con VectorGraphics2D.

El único problema que he visto hasta ahora es en jpeg save, que aparece en negro para todas mis imágenes. Esto no es muy importante para nosotros dado que png funciona, además de todos los modos vectoriales, pero estoy seguro de que sería un problema para algunos.

Tuve que agregar exactamente este código para guardar en todos estos modos:

public static void showImage(Component comp) 
{
    try
    {
        ExportDialog export = new ExportDialog();
        export.showExportDialog( null, "Export view as ...", comp, "export" );
        System.err.println("Image save complete");

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

También hay un montón de archivos de biblioteca que se deben agregar.

Básicamente, esto no es posible directamente, ya que la api java de bajo nivel funciona en términos de ráster (píxeles) y nunca se almacena en formato vectorial. (Consulte la API de java.awt.Graphics para ver a qué me refiero).

hay un programa de propósito general que convierte raster a formatos vectoriales, este es uno que encontré en una búsqueda rápida: http://autotrace.sourceforge.net/index.html

por lo tanto, al usar un programa de este tipo, puede dividir su problema en dos problemas más pequeños:

  1. convierta su JPanel en un mapa de bits o archivo ( http: // www. jguru.com/faq/view.jsp?EID=242020 )
  2. ejecuta autotrace en el archivo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top