Domanda

Vorrei esportare l'immagine nel mio JPanel in un file di grafica vettoriale in modo che possa essere modificata e stampata con una risoluzione superiore allo schermo. In sostanza voglio che la sua funzione paint () venga chiamata con una grafica di destinazione che salvi i comandi di disegno in un file grafico vettoriale.

Qual è un buon modo semplice per farlo? Quali librerie sono consigliate? Quale formato vettoriale sarebbe il migliore e perché?

È stato utile?

Soluzione

Dai un'occhiata a Il pacchetto Java EPS Graphics2D .

  

Molti programmi Java usano Graphics2D per disegnare elementi sullo schermo e, sebbene sia facile salvare l'output come file png o jpeg, è un po 'più difficile esportarlo come EPS per includerlo in un documento o un foglio.

     

Questo pacchetto rende l'intero processo estremamente semplice, perché puoi usare l'oggetto EpsGraphics2D come se fosse un oggetto Graphics2D. L'unica differenza è che tutti i metodi implementati creano output EPS, il che significa che i diagrammi che disegni possono essere ridimensionati senza portare a nessuno dei bordi frastagliati che potresti vedere quando ridimensioni le immagini basate su pixel, come i file JEPG e PNG.

Altri suggerimenti

Apache Batik ti permetterà di dipingere su un'implementazione specializzata di un oggetto Graphics2D e quindi esportare come un file di grafica vettoriale (.svg) scalabile. È quindi possibile visualizzarlo / elaborarlo / stamparlo utilizzando un browser abilitato per SVG (Firefox lo gestirà in modo nativo, ISTR, IE e altri possono utilizzare i plug-in).

Vedi l'oggetto SVGGraphics2D ( processo documentato qui )

L'EPS Java citato da Pierre sembra buono, ma in caso contrario potresti anche guardare FreeHEP Grafica vettoriale . Scritto per consentire il riutilizzo di Java nel campo della fisica delle alte energie, include un pacchetto di grafica vettoriale, realizzato attraverso un'implementazione di Graphics2D. Lo abbiamo usato per esportare EPS con successo per diversi anni.

Posso consigliare la libreria VectorGraphics2D (LGPL). Anche se non supporta tutte le funzionalità di Graphics2D, l'ho usato con successo per il mio progetto. Fornisce implementazioni di java.awt.Graphics2D per vari formati di file vettoriali. Esporta semplicemente tutte le operazioni di disegno in file EPS, SVG o PDF.

Librerie aggiuntive per persone con lo stesso requisito:

Entrambi questi GPLv3 e ben testati attraverso un ampio utilizzo in JFreeChart e Orson Charts .

FreeHEP sembra funzionare abbastanza bene anche se non sembra più essere mantenuto e le sue pagine di bug e forum sono sparite. Con solo una manciata di linee si ottiene una finestra di dialogo popup che può salvare qualsiasi componente in una varietà di formati di immagine scalabili e regolari. Abbiamo alcune immagini stimolanti, che usano il canale alfa, il testo ruotato, le aree delimitate da curve e sono state salvate perfettamente, molto meglio con VectorGraphics2D.

L'unico problema che ho visto finora è in jpeg save, che risulta nero per tutte le mie immagini. Questo non è molto importante per noi dato che png funziona, oltre a tutte le modalità vettoriali, ma sono sicuro che sarebbe un problema per alcuni.

Ho dovuto aggiungere esattamente questo codice per salvare in tutte queste modalità:

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();
    }
}

Ci sono anche molti barattoli di biblioteche che devono essere aggiunti.

questo non è fondamentalmente possibile direttamente, poiché java api di basso livello funziona in termini di raster (pixel) e non viene mai memorizzata in formato vettoriale. (Controlla l'API di java.awt.Graphics per vedere cosa intendo).

ci sono alcuni programmi per scopi generici che convertono i formati raster in formati vettoriali, questo è quello che ho trovato in una rapida ricerca: http://autotrace.sourceforge.net/index.html

quindi, usando un programma del genere puoi dividere il tuo problema in due problemi minori:

  1. converti JPanel in bitmap o file ( http: // www. jguru.com/faq/view.jsp?EID=242020 )
  2. esegue l'autotrace sul file.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top