我正在尝试让LibJPEG-turbo的可执行文件cjpeg.exe (带有Windows官方二进制文件的http://www.libjpeg-turbo.org/)在我创建的处理大图像批处理的DLL中工作。我使用的是Visual Studio2010和.NET 4。使用这个vs .NETs jpeg编码器/解码器的原因是非常高的质量和速度是必不可少的,而其他库,如BitMiracles .NET JPEG库,即使在我添加了一些不安全的代码来加速库的部分,比如读取位图数据之后,仍然非常慢。
我使用cjpeg.exe的第一次尝试是使用Process类流重定向:
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = @"C:\Users\spl3001\Documents\Visual Studio 2010\Projects\TurboJpeg\TurboJpeg\cjpeg.exe";
pi.RedirectStandardOutput = true;
pi.RedirectStandardInput = false;
pi.RedirectStandardError = true;
pi.UseShellExecute = false;
pi.CreateNoWindow = true;
pi.Arguments = " -quality " + quality.ToString() + " \"" + inFile + "\"";然后使用下面的代码将数据写到文件中:
Process proc = new Process();
proc.StartInfo = pi;
proc.Start();
string data = proc.StandardOutput.ReadToEnd();
StreamWriter sw = new StreamWriter(outFile);
sw.Write(data);
sw.Close();
proc.WaitForExit();我得到的是一个JPEG“文件”,里面有一些jpeg数据,但标题不太正确(两者都来自十六进制编辑器ASCII视图):
ÿØÿà ..JFIF..而不是
ÿØÿà..JFIF......这是在我通过正常shell使用(在cmd shell中键入)创建的示例数据上运行cjpeg.exe时创建的。第一个不正确的文件无法加载到任何查看器软件中,而第二个文件工作正常。
我认为这与作为字符串读出的StandardOutput流以及将数据作为文件写入时的一些UTF8处理有关。此外,由顶部的代码创建的输出文件比手工创建的文件要大。
我的下一个尝试是关闭所有重定向,并在参数中使用shell标准输出重定向操作符“>outputfile”,这是cjpeg.exe的推荐用法。这只会抛出一个错误,说明cjpeg接收了太多的输入文件。
但是,如果我完全按照在程序中运行的方式将参数字符串复制出来,并手动运行它,它就能正常工作。
任何建议都将不胜感激。
发布于 2015-10-03 03:14:01
在查看了可用于cjpeg.exe的开关后,我意识到有一个"-outfile“开关。这很好用。他们使用的一个例子是">“shell重定向,所以我认为没有其他方法。
https://stackoverflow.com/questions/32912620
复制相似问题