调整jpeg质量时出错:值不能为null。参数名称:结构

时间:2014-05-18 13:14:07

标签: c#

我有一个方法,我可以拍摄图像,制作一个用于调整大小的副本,然后将其作为字节数组返回。我试图添加根据此文档调整图像质量的功能:

http://msdn.microsoft.com/en-us/library/bb882583(v=vs.110).aspx

Image image = Image.FromFile(_filepath);

Image newImage = new Bitmap(newWidth, newHeight);
using (Graphics graphicsHandle = Graphics.FromImage(newImage))
{
    graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
    graphicsHandle.DrawImage(image, 0, 0, newWidth, newHeight);
}
MemoryStream memStream = new MemoryStream();

EncoderParameters myEncoderParameters = new EncoderParameters(1);

ImageCodecInfo encoder = ImageCodecInfo.GetImageDecoders().SingleOrDefault(c => c.MimeType == contentType);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
newImage.Save(memStream, encoder, myEncoderParameters);

return memStream.ToArray();

当我致电newImage.Save()时,我收到此错误:

  

System.Drawing.dll中发生了'System.ArgumentNullException'类型的异常,但未在用户代码中处理

消息是:

  

值不能为空。   参数名称:结构

2 个答案:

答案 0 :(得分:1)

MSDN表示只有在流 NULL 时调用此Save()重载时才会出现ArgumentNullException。

您确定没有其他(省略?)代码不会使此流无效吗? 你确定这是例外的网站吗?

答案 1 :(得分:0)

忘了一步。我创建了EncoderParameter对象,但未将其包含在EncoderParameters集合中。这个消息使我感到困惑。

我添加后全部解决了:

myEncoderParameters.Param[0] = myEncoderParameter;