加载标准输出并将其解析为图像
Load standart output and parse it to Image
我有 graphviz dot.exe
文件,我用参数 -Tpng
调用它(输出类型是 png,但我不在乎它是 png、bmp 还是其他格式)。我用 C# 代码启动它:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = path;
psi.UseShellExecute = false;
psi.Arguments = "-Tpng";
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
Process p = Process.Start(psi);
然后,我写输入
p.StandardInput.WriteLine(input);
input
是之前定义的,它是一个字符串。输入有效,手动测试。
然后,我需要读取 graphviz 打印到标准输出中的输出并将其解析为 Image
。
我尝试读取内存流,但我无法读取它,或者读取后内存流被锁定(尝试时抛出异常 Image.FromStream(myMemoryStream);
)。
我能够将输出加载到 string
string output = "";
while (true)
{
string newOutput = p.StandardOutput.ReadLine();
output += newOutput;
if (newOutput == String.Empty)
break;
}
我已尝试按照 in this answer 所述解析此字符串,但它抛出异常(字符串无效)。
如何从 dot.exe
输出中得到 Image
?
从评论来看,程序似乎希望 StandardInput
在返回内容之前完成。关闭StandardInput
实现它:
p.StandardInput.WriteLine(input);
p.StandardInput.BaseStream.Close();
我有 graphviz dot.exe
文件,我用参数 -Tpng
调用它(输出类型是 png,但我不在乎它是 png、bmp 还是其他格式)。我用 C# 代码启动它:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = path;
psi.UseShellExecute = false;
psi.Arguments = "-Tpng";
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;
Process p = Process.Start(psi);
然后,我写输入
p.StandardInput.WriteLine(input);
input
是之前定义的,它是一个字符串。输入有效,手动测试。
然后,我需要读取 graphviz 打印到标准输出中的输出并将其解析为 Image
。
我尝试读取内存流,但我无法读取它,或者读取后内存流被锁定(尝试时抛出异常 Image.FromStream(myMemoryStream);
)。
我能够将输出加载到 string
string output = "";
while (true)
{
string newOutput = p.StandardOutput.ReadLine();
output += newOutput;
if (newOutput == String.Empty)
break;
}
我已尝试按照 in this answer 所述解析此字符串,但它抛出异常(字符串无效)。
如何从 dot.exe
输出中得到 Image
?
从评论来看,程序似乎希望 StandardInput
在返回内容之前完成。关闭StandardInput
实现它:
p.StandardInput.WriteLine(input);
p.StandardInput.BaseStream.Close();