使用.NET 将图像转换为WMF?
有很多将 wmf 转换为位图的示例,例如: 可靠的 .wmf/wmf 到基于像素的图像转换
但是我需要反向操作。我不寻找矢量化器。我只想将图片嵌入到 wmf 文件中,而不必担心 wmf 格式的位和字节。我需要一个 .NET 解决方案,最好是 C# 。
我首先认为这可以完成这项工作:
using (Image img = Image.FromFile (path)) {
img.Save (myStream, System.Drawing.Imaging.ImageFormat.Wmf);
}
但这在运行时抱怨编码器为空。我在哪里/如何构建这样的编码器?我不需要一个复杂的,只需要一个将图像包装成 wmf 的。 WMF 支持的格式有什么要求吗?我想支持 png 和 bmp,但也支持 gif 吗?
There are plenty of examples of converting a wmf into a bitmap like:
Reliable .wmf/wmf to Pixel based image conversion
But I need the reverse operation. I do not look for a vectorizer. I just want to embed a picture inside a wmf file without having to bother about the bits and bytes of the wmf format. I need a solution for .NET preferably in C#.
I first thought this would do the job:
using (Image img = Image.FromFile (path)) {
img.Save (myStream, System.Drawing.Imaging.ImageFormat.Wmf);
}
But this complains at runtime that the encoder is null. Where/How can I build such an encoder? I do not need a complicated one, just one that wraps an image into a wmf. Are there some requirements on the supported formats in WMF? I suppose png and bmp are supported but is gif also supported?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
来自此处:
但我想你已经做到了:)
这里有人正在将位图放入文件流中。
MakeMetafileStream() 是:
有趣的东西。
但至于编码器的事情...
此处来自 MS 的 Peter Huang 发布了这种非托管方法:
希望这能让你到达那里:)
From here:
But I guess you already got that far :)
Here someone is putting a bitmap in a FileStream.
with MakeMetafileStream() being:
Interesting stuff.
But as to the encoder thing...
Here Peter Huang from MS posted this unmanaged approach:
Hope this'll get you there :)
这是问题的完整答案,包括我的修改。文森特的回答是完全正确的。仅缺少一些定义和一个枚举。这就是为什么我在这里发布“干净”的工作代码,希望它对其他人有用。
Here is the full answer to the question including my modifications. Vincent's answer is fully correct. Only some definitions and one enum were missing. That is why I post here the "clean" working code in the hope it can be useful for someone else.
jdehaan 发布的改进版本(顺便说一句,对他和 Vincent 表示赞赏)
这个版本不会留下临时文件,并且还避免将 _bufferSize 复制到临时文件,然后再将其复制到另一个缓冲区。
再次感谢你们。
An improved version of what jdehaan posted (kudos btw to him and Vincent)
This one does not leave temp files behind and also avoids copying _bufferSize to a temp file only to then copy it to another buffer.
Thanks again guys.
这是一个对我有用的 Win32 GDI+ 示例(归功于 http://www.codeproject.com/Articles/6879/How-to-use-GDI-to-save-image-in-WMF-EXIF-or-EMF -fo)
Here's a Win32 GDI+ example that worked for me (credit to http://www.codeproject.com/Articles/6879/How-to-use-GDI-to-save-image-in-WMF-EXIF-or-EMF-fo)