2011-10-13 3 views
6

ExportStringでEMFまたはGIFを書き出すことはできますか?このデモstreamoutput.emfで何とか台無します:ExportStringでグラフィックスを変換する

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を通じて電磁場を転送するためにそれを使用することができるかもしれません

kernel.Compute("ExportString[Graphics[Rectangle[]], \"EMF\"]"); 
File.WriteAllText("C:\\Temp\\output.emf", kernel.Result.ToString()); 

補遺

その作業を手に入れました。出力ファイルが"GIF....だけではなくGIF...のようなものから始まるので、それのルックスによって

kernel.Compute("ExportString[Graphics[Rectangle[]],{\"Base64\",\"EMF\"}]"); 
byte[] decodedBytes = Convert.FromBase64String(kernel.Result.ToString()); 
File.WriteAllBytes("C:\\Temp\\output.emf", decodedBytes); 

答えて

8

Writeは、文字列filestreamへの書き込みの引用符を含んでいます。 Writeの代わりにBinaryWriteを使用すると、動作するように見えます。例えば

file = ExportString[graphic, "GIF"]; 
stream = OpenWrite["streamoutput.gif", BinaryFormat -> True]; 
BinaryWrite[stream, file]; 
Close[stream]; 
Import["streamoutput.gif"] 

は、少なくともGIFのための有効な文字列を生成しない

streamoutput

のでExportStringを生成します。私は窓がないのでEMFをテストすることはできません。

+3

このソリューションは、Windows上のEMFでも機能することを確認しました。 – WReach

+0

ありがとう、平家。 EMFも機能します。 –

関連する問題