2011-10-13 18 views
6

¿Puede ExportString exportar un EMF o GIF? En este streamoutput.emf demostración consigue de alguna manera destrozado:Conversión de gráficos 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]; 

Si ExportString trabajó yo podría ser capaz de utilizarlo para transferir los CEM a través de enlace de red, por ejemplo,

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

Adición

Tienes que trabajar.

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

Respuesta

8

Por lo visto, Write incluye las comillas de la cadena file al escribir en stream, por lo que el archivo de salida comienza con algo como "GIF.... en lugar de sólo GIF.... Cuando se usa BinaryWrite en lugar de Write, parece que funciona. Por ejemplo

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

produce

streamoutput

Así ExportString no producir una cadena válida para al menos GIF. No tengo ventanas, así que no puedo probar para EMF.

+3

Confirmé que esta solución también funciona para EMF en Windows. – WReach

+0

Gracias, Heike. EMF funciona también. –

Cuestiones relacionadas