我有下一个代码:
class Program
{
const string ImagePath = @"C:\mypath\36";
private const int Quality = 50;
static void Main()
{
Console.WriteLine("Inicio: " + DateTime.Now);
var images = Directory.GetFiles(ImagePath);
foreach (var name in images)
{
var bitmap = new Bitmap(name);
var tname = name.Split('\\')[5].Split('.')[0];
VariousQuality(bitmap, tname);
}
Console.WriteLine("Finalizacion: " + DateTime.Now);
Console.ReadLine();
}
static void VariousQuality(Image original, string name)
{
var codecs = ImageCodecInfo.GetImageEncoders();
var jpgEncoder = codecs.FirstOrDefault(codec => codec.FormatID == ImageFormat.Jpeg.Guid);
if (jpgEncoder == null) return;
var encoder = Encoder.Quality;
var encoderParameters = new EncoderParameters(1);
var encoderParameter = new EncoderParameter(encoder, Quality);
encoderParameters.Param[0] = encoderParameter;
var fileOut = Path.Combine(ImagePath, "__" + name + ".jpg");
var ms = new FileStream(fileOut, FileMode.Create, FileAccess.Write);
original.Save(ms, jpgEncoder, encoderParameters);
ms.Flush();
ms.Close();
}
static void DefaultCompressionPng(Image original)
{
var ms = new MemoryStream();
original.Save(ms, ImageFormat.Png);
var compressed = new Bitmap(ms);
ms.Close();
var fileOutPng = Path.Combine(ImagePath, "default.png");
compressed.Save(fileOutPng, ImageFormat.Png);
}
static void DefaultCompressionJpeg(Image original)
{
var ms = new MemoryStream();
original.Save(ms, ImageFormat.Jpeg);
var compressed = new Bitmap(ms);
ms.Close();
var fileOutPng = Path.Combine(ImagePath, "default.jpg");
compressed.Save(fileOutPng, ImageFormat.Jpeg);
}
}该代码正在与.Net version 4.0一起工作,但现在我正在将代码更新到4.5版本,并得到下一个错误:
original.Save(ms, jpgEncoder, encoderParameters);“System.ArgumentException”类型的未处理异常发生在System.Drawing.dll {System.Collections.ListDictionaryInternal}中,参数无效。System.Drawing.Image.Save(流,ImageCodecInfo编码器,EncoderParameters encoderParams) 2012\Projects\ImageCompression\ImageCompression\Program.cs:line (图片原件,字符串名称ImageCompression.Program.VariousQuality 44 )
关于如何修复这个错误的一些想法?
发布于 2017-04-17 21:46:06
将Quality类型更改为long。
private const long Quality = 50;ps
myEncoderParameter = new EncoderParameter(myEncoder, 50L);https://stackoverflow.com/questions/43459185
复制相似问题