加载标准输出并将其解析为图像

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();