我尝试使用LibJPEG-turbo的可执行文件cjpeg.exe(http://www.libjpeg-turbo.org/和Windows官方二进制文件)在DLL中工作我正在创建处理大图像的批处理。我使用的是Visual Studio 2010和.NET 4.使用它与.NET的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使用创建的示例数据上运行cjpeg.exe时创建的(在cmd shell中键入它)。第一个不正确的文件不会加载到任何查看器软件中,而第二个文件可以完美地运行。
我认为它与StandardOutput流被读取为字符串以及在将其作为文件写出时对数据进行一些UTF-8处理有关。此外,顶部代码创建的输出文件大于手动完成的输出文件。
我的下一次尝试是关闭所有重定向,并在参数中包含shell标准输出重定向运算符" > OUTPUTFILE"以及cjpeg.exe的推荐用法。这只是抛出一个错误,说cjpeg正在接收太多的输入文件。
但是,如果我将参数字符串完全复制,因为它在程序中运行并手动运行,它可以正常工作。
任何建议都将不胜感激。
答案 0 :(得分:0)
在查看了cjpeg.exe可用的开关之后,我意识到有一个" -outfile"开关。这非常有效。他们使用的一个例子是">" shell重定向,所以我认为没有其他方式。