2011-10-13 39 views
6

ExportString có thể xuất EMF hoặc GIF không? Trong streamoutput.emf demo này bằng cách nào đó được đọc sai:Chuyển đổi đồ họa bằng 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]; 

Nếu ExportString làm việc tôi có thể có thể sử dụng nó để chuyển EMFs qua netlink, ví dụ

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

Phụ Lục

Got mà làm việc.

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

Trả lời

8

Bởi vẻ của nó, Write bao gồm dấu ngoặc kép của chuỗi file khi viết để stream, vì vậy các tập tin đầu ra bắt đầu với cái gì đó như "GIF.... thay vì chỉ GIF.... Khi sử dụng BinaryWrite thay vì Write có vẻ như nó hoạt động. Ví dụ

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

sản xuất

streamoutput

Vì vậy ExportString không tạo ra một chuỗi giá trị trong GIF ít nhất. Tôi không có cửa sổ nên tôi không thể kiểm tra EMF.

+3

Tôi xác nhận rằng giải pháp này cũng hoạt động cho EMF trên Windows. – WReach

+0

Cảm ơn, Heike. EMF cũng hoạt động. –