2011-10-13 16 views
6

Can ExportString può esportare un EMF o GIF? In questa demo streamoutput.emf in qualche modo viene storpiato:Conversione di grafica con 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]; 

Se ExportString lavorato potrei essere in grado di usarlo per trasferire i campi elettromagnetici attraverso NETLink, per esempio

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

Addendum

Got che lavorare.

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

risposta

8

Con gli sguardi di esso, Write include le virgolette della stringa file durante la scrittura di stream, in modo che il file di output inizia con qualcosa come "GIF.... invece di GIF.... Quando si utilizza BinaryWrite anziché Write sembra funzionare. Per esempio

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

produce

streamoutput

Così ExportString non produrre una stringa valida per GIF, almeno. Non ho finestre quindi non posso testare per EMF.

+3

Ho confermato che questa soluzione funziona anche per Windows con EMF. – WReach

+0

Grazie, Heike. EMF funziona anche. –