ExportString可以导出EMF或GIF吗?在这个演示中,streamoutput.emf以某种方式被破坏了:
Quiet[DeleteFile["C:\\Temp\\thisworks.emf"]];
Quiet[DeleteFile["C:\\Temp\\streamoutput.emf"]];
graphic = Graphics[{Thick, Red, Circle[{#, 0}] & /@ Range[4],
Black, Dashed, Line[{{0, 0}, {5, 0}}]}];
Export["C:\\Temp\\thisworks.emf", graphic, "EMF"];
file = ExportString[graphic, "EMF"];
stream = OpenWrite["C:\\Temp\\streamoutput.emf", BinaryFormat -> True];
Write[stream, file];
Close[stream];
如果ExportString有效,我可以用它来通过NETLink传输EMF,例如。
kernel.Compute("ExportString[Graphics[Rectangle[]], \"EMF\"]");
File.WriteAllText("C:\\Temp\\output.emf", kernel.Result.ToString());
附录
搞定了。
kernel.Compute("ExportString[Graphics[Rectangle[]],{\"Base64\",\"EMF\"}]");
byte[] decodedBytes = Convert.FromBase64String(kernel.Result.ToString());
File.WriteAllBytes("C:\\Temp\\output.emf", decodedBytes);
答案 0 :(得分:8)
根据它的外观,Write
在写入file
时包含字符串stream
的引号,因此输出文件以"GIF....
而不是GIF...
开头只是BinaryWrite
。使用Write
代替file = ExportString[graphic, "GIF"];
stream = OpenWrite["streamoutput.gif", BinaryFormat -> True];
BinaryWrite[stream, file];
Close[stream];
Import["streamoutput.gif"]
时,它似乎确实有效。例如
ExportString
产生
所以{{1}}确实至少为GIF生成一个有效的字符串。我没有窗户,所以我无法测试EMF。