下面的C#代码应生成EMF,但查看输出(在Vim中)会将其显示为PNG。也许有人在S.O.知道一个好的解决方案或解决方案。
MathKernel k = new MathKernel();
k.CaptureGraphics = true;
k.GraphicsFormat = "Metafile";
k.Compute("Show[Graphics[{Thick, Blue, Circle[{#, 0}] & /@ Range[4], Black, Dashed, Line[{{0, 0}, {5, 0}}]}]]");
k.Graphics[0].Save("C:\\Temp\\file.emf", System.Drawing.Imaging.ImageFormat.Emf);
到目前为止,我正在考虑在ExportString [...,“EMF”]中包装Show [Graphics ...]并使用MathKernel Result属性收集结果。
附录
MathKernel.Graphics属性[1]显然是一个.Net Graphics方法,它只处理图像文件,如位图,而不是基于矢量图形的增强图元文件。
增强型图元文件可以通过.NETLink一次传输一次,但方式如下:
using System;
using System.IO;
using Wolfram.NETLink;
public class Example
{
public static void Main(String[] args)
{
MathKernel k = new MathKernel();
k.Compute("ExportString[Graphics[{Disk[]}], {\"Base64\", \"EMF\"}]");
byte[] decodedBytes = Convert.FromBase64String(k.Result.ToString());
// The transferred EMF can be used or simply written out to file.
File.WriteAllBytes("C:\\Temp\\file.emf", decodedBytes);
}
}
答案 0 :(得分:4)
这是一个有效的解决方案:
using System;
using Wolfram.NETLink;
public class Example {
public static void Main(String[] args) {
MathKernel k = new MathKernel();
k.Compute("Export[\"c:/users/arnoudb/out.emf\", Graphics[{Disk[]}], \"EMF\"]");
}
}
我不确定你为什么考虑这个部分:
k.Graphics[0].Save("C:\\Temp\\file.emf", System.Drawing.Imaging.ImageFormat.Emf);
一个Mathematica错误,因为k.Graphics [0]是纯C#System.Drawing.Image类。也许你可以澄清一下这部分?