我正在尝试使用c#.net。
将wmf图像文件转换为png格式但是,保存的图像不清楚。
我的代码:
Metafile img = new Metafile(@"test.wmf");
MetafileHeader header = img.GetMetafileHeader();
Bitmap bitmap = new Bitmap((int)(img.Width / header.DpiX * 100), (int)(img.Height / header.DpiY * 100));
using(Graphics g = Graphics.FromImage(bitmap)){
g.DrawImage(img, 0, 0);
}
bitmap.Save("test.png", ImageFormat.Png);
我怎么能说清楚?
答案 0 :(得分:8)
.wmf文件的DpiX / Y值非常大。您需要重新缩放图像,使其更适合您的显示器分辨率。这段代码产生了一个体面的文件版本。您可能需要调整缩放以满足您的需要,或者之后重新缩放位图:
using (Metafile img = new Metafile(@"c:\temp\test.wmf")) {
MetafileHeader header = img.GetMetafileHeader();
float scale = header.DpiX / 96f;
using (Bitmap bitmap = new Bitmap((int)(scale * img.Width / header.DpiX * 100), (int)(scale * img.Height / header.DpiY * 100))) {
using (Graphics g = Graphics.FromImage(bitmap)) {
g.Clear(Color.White);
g.ScaleTransform(scale, scale);
g.DrawImage(img, 0, 0);
}
bitmap.Save(@"c:\temp\test.png", ImageFormat.Png);
}
}
答案 1 :(得分:0)
最后,我得到了一个IDEA !!
那就是使用Inkspace
众所周知,Inkscape是一个矢量图形编辑器
今天,我发现INKSCAPE有命令行选项!! http://goo.gl/Moksf。
所以,我应该做的是使用一些选项调用incape.exe,例如:
Process.Start(“inkscape.exe -f {wmf_filename} -e {png_filename_to_be_made}”);
这是转换后的png文件:http://yfrog.com/gyu40ap
非常清晰的png图像。这就是我想要的!
谢谢!
答案 2 :(得分:0)
来源:https://keestalkstech.com/2016/06/rasterizing-emf-files-with-net-c/