Question

Je souhaite exporter l'image de mon fichier JPanel vers un fichier graphique vectoriel afin qu'elle puisse être modifiée et imprimée à une résolution supérieure à celle de l'écran. En substance, je souhaite que sa fonction paint () soit appelée avec une destination Graphics qui enregistre les commandes de dessin dans un fichier de graphique vectoriel.

Quel est un bon moyen simple de faire cela? Quelles bibliothèques sont recommandées? Quel format de vecteur serait le mieux et pourquoi?

Était-ce utile?

La solution

Consultez le package Java EPS Graphics2D .

  

De nombreux programmes Java utilisent Graphics2D pour dessiner des éléments à l'écran. Bien qu'il soit facile d'enregistrer la sortie au format png ou jpeg, il est un peu plus difficile de l'exporter sous forme de fichier EPS à inclure dans un document ou un document.

     

Ce paquet rend le processus extrêmement simple, car vous pouvez utiliser l'objet EpsGraphics2D comme s'il s'agissait d'un objet Graphics2D. La seule différence est que toutes les méthodes implémentées créent une sortie EPS, ce qui signifie que les diagrammes que vous tracez peuvent être redimensionnés sans laisser apparaître les bords irréguliers que vous pouvez voir lors du redimensionnement d'images au pixel, telles que les fichiers JEPG et PNG.

Autres conseils

Apache Batik vous permettra de définir une implémentation spécialisée d'un objet Graphics2D, puis de l'exporter en tant que un fichier graphique vectoriel évolutif (.svg). Vous pouvez ensuite visualiser / traiter / l’imprimer à l’aide d’un navigateur compatible SVG (Firefox le gérera de manière native, ISTR, IE et d’autres peuvent utiliser des plugins).

Voir l'objet SVGGraphics2D ( processus documenté ici )

Le fichier Java EPS mentionné par Pierre a bonne apparence, mais si ce n’est pas le cas, vous pouvez également consulter FreeHEP Graphiques vectoriels . Écrit pour permettre la réutilisation de Java dans le domaine de la physique des hautes énergies, il inclut un ensemble de graphiques vectoriels, réalisé via une implémentation de Graphics2D. Nous l’utilisons depuis de nombreuses années pour exporter des EPS.

Je peux recommander la bibliothèque VectorGraphics2D (LGPL). Bien qu'il ne supporte pas toutes les fonctionnalités de Graphics2D, je l'ai utilisé avec succès pour mon projet. Il fournit des implémentations de java.awt.Graphics2D pour différents formats de fichiers vectoriels. Il exporte simplement toutes les opérations de peinture dans des fichiers EPS, SVG ou PDF.

Bibliothèques supplémentaires pour les personnes ayant les mêmes besoins:

Ces deux GPLv3 et bien testés dans le cadre d'une utilisation intensive dans JFreeChart et Graphiques Orson .

FreeHEP semble fonctionner assez bien bien qu'il ne semble plus être maintenu et que son bug et ses pages de forum ont disparu. Avec une poignée de lignes, vous obtenez une boîte de dialogue contextuelle qui peut enregistrer n'importe quel composant dans une variété de formats d'image standard et évolutifs. Nous avons des images complexes, utilisant canal alpha, texte pivoté, zones délimitées par des courbes, et elles sont parfaitement sauvegardées, bien mieux avec VectorGraphics2D.

Le seul problème que j’ai vu jusqu’à présent est l’enregistrement jpeg, qui apparaît en noir pour toutes mes images. Ce n'est pas très important pour nous étant donné que le png fonctionne, plus tous les modes vectoriels, mais je suis sûr que ce serait un problème pour certains.

Je devais ajouter exactement ce code pour enregistrer dans tous ces modes:

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

Vous devez également ajouter un ensemble de fichiers de bibliothèque.

Ceci n’est fondamentalement pas possible directement, car l’API Java de bas niveau fonctionne en termes de raster (pixels) et n’est jamais stocké au format vectoriel. (Consultez l'API de java.awt.Graphics pour voir ce que je veux dire).

il existe un programme général qui convertit les formats raster en formats vectoriels, c’est celui que j’ai trouvé lors d’une recherche rapide: http://autotrace.sourceforge.net/index.html

Ainsi, en utilisant un tel programme, vous pouvez diviser votre problème en deux problèmes plus petits:

  1. convertissez votre JPanel en bitmap ou en fichier ( http: // www. jguru.com/faq/view.jsp?EID=242020 )
  2. exécuter autotrace sur le fichier.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top