【问题标题】:C# InMemoryCopy of Image file as StandardInput for process图像文件的 C# InMemoryCopy 作为进程的 StandardInput
【发布时间】:2013-07-02 23:29:57
【问题描述】:

我正在尝试在内存中创建图像的副本并将其用作控制台进程的 STDIN。

创建 InMemoryCopy:

using (FileStream fs = File.OpenRead(image))
{
   fs.CopyTo(inMemoryCopy);
}

启动进程并输入STDIN:

p.StartInfo.Arguments = " jpg:fd:0" +
   " -resize 500" +
   " \"" + tmpFile + "\"";

p.Start();
//Reads in pbm file.
using (var streamReader = new StreamReader(inMemoryCopy))
{
  p.StandardInput.Write(streamReader.ReadToEnd());
  p.StandardInput.Flush();
  p.StandardInput.Close();
}

我遇到的问题是 imagemagick noww 不再将文件识别为图像了吗?使用的文件是 .jpg,但从 streamReader 看来,它似乎没有作为有效的图像文件写入 STDIN?

由于我是一个非常新手,我用谷歌搜索并在这里搜索以找到答案,但无法弄清楚。

如何将图像文件读入内存并将其用作控制台应用程序中的 STDIN(例如 imagemagick)。

非常感谢您的帮助!

【问题讨论】:

  • 你为什么要颠覆imagemagick的文件读取能力???
  • @Michael Bray - 我想在内存中有一个文件的 tmp 副本,并且我的不同效果的任何更改都将仅应用于此副本。一旦我对更改感到满意,我就会保存最终文件。这应该避免过度写入/读取硬盘并提高性能。我对 C# 完全陌生,所以我对更多的 cmets 感到非常高兴。

标签: c# process console imagemagick stdin


【解决方案1】:

StreamReader 是一个文本阅读器。您可能希望将二进制数据写入标准输入基流。据此:Can i put binary in stdin? C#.

你可以这样做:

fs.CopyTo(p.StandardInput.BaseStream)

【讨论】:

  • 非常感谢您提供的链接,它向我展示了正确的方法。很好的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2014-05-08
  • 2017-03-18
相关资源
最近更新 更多