GDI + / C #: Comment enregistrer une image comme EMF?
Si vous utilisez de l'Image.Méthode Save pour enregistrer une image dans un EMF/WMF, vous obtenez une exception (http://msdn.microsoft.com/en-us/library/ktx83wah.aspx)
Est-il une autre façon d'économiser de l'image à un EMF/WMF?
Existe-il des codeurs?
source d'informationauteur EricSch
Vous devez vous connecter pour publier un commentaire.
Image
est une classe abstraite: ce que vous voulez faire dépend de savoir si vous avez affaire à unMetafile
ou unBitmap
.La création d'une image avec GDI+ et de l'enregistrer dans un EMF est simple avec
Metafile
. Par Mike post:C'est ce que vous voulez faire la plupart du temps, puisque c'est ce que l'EMF est pour: enregistrement des images vectorielles dans le formulaire de GDI+ commandes de dessin.
Vous pouvez enregistrer un
Bitmap
à un fichier EMF en utilisant la méthode ci-dessus et de l'appel deig.DrawImage(your_bitmap)
mais sachez que ce n'est pas par magie secrète de données raster dans un vecteur d'image.Si je me souviens bien, il peut être fait avec une combinaison de la Métafichier.GetHenhmetafile(), l'API GetEnhMetaFileBits() et de Flux.Write(), quelque chose comme
Je pense que c'est comment j'ai résolu le problème quand je l'ai eu.
Un métafichier est un fichier qui enregistre une séquence d'opérations GDI. Il est évolutif, car l'original de la séquence d'opérations qui a généré l'image sont capturés, et, par conséquent, les coordonnées qui ont été enregistrés peuvent être mis à l'échelle.
Je pense que, dans .NET, vous devez créer un
Metafile
objet, créer unGraphics
objet à l'aide deGraphics.FromImage
puis effectuer votre dessin étapes. Le fichier est automatiquement mis à jour lorsque vous dessinez sur elle. Vous pouvez trouver un petit échantillon dans la documentation de Les graphiques.AddMetafileComment.Si vous voulez vraiment pour stocker une image bitmap dans un métafichier, utilisez ces étapes, puis utiliser
Graphics.DrawImage
pour peindre l'image bitmap. Toutefois, lorsqu'il est mis à l'échelle, il sera étendu à l'aide deStretchBlt
.La question était: "Est-il une autre façon d'économiser de l'image à un EMF/WMF?" Pas "qu'est-ce que métafichier" ou "comment créer de métafichier" ou "comment utiliser métafichier avec des Graphismes".
Je regarde aussi pour répondre à cette question "comment économiser de l'EMF/WMF"
En fait, si vous utilisez:
Dans les deux cas, l'image est enregistrée au format png. Et c'est le problème auquel je ne peux pas résoudre :/
La réponse par erikkallen est correct. J'ai essayé ce à partir de VB.NET, et a dû utiliser 2 différents DllImports pour le faire fonctionner:
La première importation est utilisé pour la première appeler pour obtenir le fem taille. La deuxième importation d'obtenir le véritable bits.
Alternativement, vous pouvez utiliser:
Cette copie de la fem bits directement sur le fichier nommé.
Vous devez également fermer la
CopyEnhMetaFile
gestionnaire:Sinon, vous ne pouvez pas supprimer le fichier car il est encore utilisé par le processus.
Je recommanderais d'éviter de telles extern et non gérés les fichiers inutiles dans une réussi .NET application.
Au lieu de cela, je vous recommande de quelque chose d'un peu plus comme la solution donnée dans ce fil:
Convertir une image en format WMF .NET?
P. S. je réponds à ce vieux thread parce que c'était la meilleure réponse que j'ai trouvé, mais puis a terminé le développement d'une solution gérée, ce qui conduirait alors me à le lien ci-dessus. Donc, pour en sauver d'autres de l'époque, je pensais que je n'avais point de celui-ci à celui-là.
Je cherchais un moyen de sauver le GDI instructions dans un Métafichier objet d'un fichier EMF. Han post m'a aidé à résoudre le problème. C'était avant que j'ai rejoint les forces spéciales. Merci, Han. Voici ce que J'ai essayé.
Il semble y avoir beaucoup de confusion sur le vecteur vs bitmap. Tout le code dans ce fil génère bitmap (non vectoriel) - il ne permet pas de conserver le vecteur des appels GDI. Pour le prouver à vous-même, télécharger le "EMF Analyseur" de l'outil et d'inspecter les fichiers de sortie: http://downloads.zdnet.com/abstract.aspx?docid=749645.
Ce problème a causé de nombreux développeurs qui envisagent l'angoisse. Ça serait bien si Microsoft de corriger cette situation et bien prendre en charge leur propre format EMF.