7
votes

Dessinez EMF antialiasé

Y a-t-il un moyen de dessiner un métafichier EMF (formulaire exporté d'un outil de dessin) avec une antialiasing activé? Les outils que j'ai essayés ne sont pas capables d'exporter des fichiers EMF analiasés, donc je me demandais si je peux la remettre manuellement lors du dessin de l'EMF dans la dérogation sur les commandes de mes commandes.

Si quelqu'un peut confirmer que c'est techniquement possible de générer des fichiers EMF antialiasés, une autre solution serait d'utiliser un outil de dessin pouvant exporter vers l'EMF antialiasé ou un convertisseur de 3ème partie le faire plus tard. Si quelqu'un connaît un tel outil, merci de me le faire savoir.

Edit: Lorsque vous regardez le Instructions EMF < / a> Il ne semble pas que l'EMF elle-même puisse réellement stocker les informations s'il doit être rendu antialiasé ou non. Au moins je n'ai pu trouver rien. Il est plus probable que l'antialiasing soit effectuée par le moteur de lecture. Par exemple, lorsque j'ouvre un EMF dans Word 2007, il est rendu antialiasé. Mais pas lorsque je le dessine avec GDI + "Moteur de lecture" ( graphiques.drawimage (...) ). Ou quand je l'affiche, le Viewer Standard Windows Image Viewer. Cela me fait croire que certains outils ont réellement leur propre moteur de lecture EMF. Alors peut-être qu'il y a une bibliothèque gratuite .Net (de préférence avec code source) qui me donnez un modèle d'objet des instructions EMF stockées dans le fichier EMF analysé afin que je puisse le lire moi-même au lieu d'utiliser graphiques.drawimage (... ) ?


6 commentaires

Si tout le reste échoue, vous pouvez probablement le dessiner à quatre fois la taille ou ainsi de suite.


J'ai essayé cela, à de petites tailles, cela a toujours l'air moche à l'aide de cette approche, il y a de manière proparablement une mémoire laid de mémoire. (Je vais afficher des lots de tels usercontrols à la fois).


Dupliquer: Stackoverflow.com/questions/1422949/...


Les petites tailles sembleront moche quoi que ce soit, car vos points seront lancés vers des limites de pixels entier. Vous devez choisir quel style de laid est le plus acceptable.


N'oubliez pas de définir INTERPOLATIONMODE sur HighqualityBicubic avant l'abattage.


Vous pouvez convertir le fichier EMF au moment de l'exécution vers un métafichier EMF +. Voici C # Comment le faire .


3 Réponses :


9
votes

Nous avons eu un problème similaire dans un projet DirectX. L'ampleur et l'échelle de l'échelle de l'échelle progressive fonctionne dans une certaine mesure, mais cela le simule. Si c'est quelque chose que vous devez faire encore et encore, vous pouvez peut-être analyser les enregistrements du WMF et les dessiner avec GDI + Antialiased.

Les threads suivants remontent à cela (mais ils sont de 2005 afin que les choses auraient pu changer):

http://www.dotnet247.com/247Reference/msgs/28 /144605.aspx

http: / /www.dotnetmonster.com/uwe/forum.aspx/dotnet-sdk/1127/graphics-drawimage-metafile-no-antiAntiasing

[EDIT:]

Ces trois programmes pourraient faire le travail pour vous: je suppose que vous allez bien avec le faire à la main:

http: // emf-to-vecteur -converter-command-line-ser.smartcode.com/info.html

http://www.typdf.com/pdf-editor/index.html

http://www.ivanview.com/converter/emf-batch -converter.html

[EDIT II:]

Eh bien, voici un programme qui vous permettra d'inspecter une EMF de différentes manières:

http://download.cnet.com /windows/3055-2383_4-10558240.html?tag=pdl-redrir

... et voici une bibliothèque de freeware qui vous permettra d'analyser 122 des commandes EMF et de les produire dans GDI +. Cela devrait probablement faire l'affaire:

http://www.codeproject.com/kb /Gdi-plus/emfexplorer.aspx?msg=2359423

... Oh, et remarquez également le commentaire # 3 sur la page de codeProject. On dirait que quelqu'un a frappé la tête contre le mur avant. J'espère que cela résout votre problème.


3 commentaires

Ces programmes semblent simplement la convertir en d'autres formats de fichiers. Nous avons choisi EMF pour afficher l'art vectoriel car il s'agit de la seule vectorielle vectorielle que GDI + peut gérer. Nous devons dessiner l'art du code (donc gdi +) parce que nous la modifions de manière dynamique à l'exécution et l'animer. Affichage également EMF avec GDI + est probablement le moyen de la plupart des CPU et de la mémoire d'afficher de l'art vectoriel. En utilisant un autre format que EMF ne semble pas utile. Une solution fraîche serait d'avoir un vecteurGrafik (n'importe quel format) du convertisseur C # GDI + Instruments.


Dans ce cas, pourquoi n'utilisez-vous pas un système de dessin de mode retenu et omettez-vous EMF AlltoGether? En théorie, vous pouvez stocker les images EMF et utiliser une bibliothèque personnalisée pour extraire chaque forme et les attirer à nouveau avec GDI (+). Toutefois, à partir de votre description du problème, j'aurais créé un format propriétaire que décrit les images à l'aide d'objets, puis le rendent à la surface en question. Une approche différente pourrait être d'utiliser SWF, ce qui est bien mieux supporté, bien documenté et imo plus polyvalent.


Nous ne pouvons pas utiliser de format propriétaire car nous devons dessiner la technique avec un logiciel de dessin commun (illustrateur, inkscape, CorelDRAW ... une de ces).



4
votes

EMF utilise des commandes GDI, pas GDI +, elle n'a donc aucune notion d'antialiasing. Je soupçonne que lorsque vous demandez à GDI + de rendant le fichier, il l'envoie à GDI et copie simplement le bitmap résultant.

La duplication de cela en code serait la même que celle de la réimplément du GDI, ce n'est donc pas terriblement réalisable. Pas impossible, juste un travail plus important que la prestation justifierait. S'il y a un utilitaire open source pouvant ouvrir des fichiers EMF en dehors de Windows, vous pouvez consulter le code source.

Je suppose que ce mot utilise le truc de décollage.


0 commentaires

3
votes

Fichier EMF est une liste des commandes GDI. Donc, ce ne sera donc pas anti-asibilisé, même si sous GDI +, vous mettez un appel de SmoothingMode () avant le dessin. Vous devrez énumérer les commandes GDI, puis la traduire en commandes GDI +.

Sous Vista / Sept, vous pouvez utiliser la fonction GDI + 1.1 nommée GDIPCONVERTOEMFPLUS / CONTERTTOEMFPLUS. Si vous souhaitez que votre programme fonctionne avec XP, vous devez écrire votre propre énumération, puis Conversion en commandes GDI +.

L'énumération GDI puis la conversion en GDI + est possible a été réalisée par Emfexplorer , mais j'ai écrit Certains code peuvent être plus faciles à suivre , même s'il est écrit à Delphi.

Je pose cette réponse juste maintenant (je suis en retard), car j'ai passé beaucoup de temps à trouver une solution à l'aide de ConvertoEnfplus et à écrire un code open source mis à jour au cas où cette méthode n'est pas disponible.


0 commentaires