我有一个方法,我可以拍摄图像,制作一个用于调整大小的副本,然后将其作为字节数组返回。我试图添加根据此文档调整图像质量的功能:
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'类型的异常,但未在用户代码中处理
消息是:
值不能为空。 参数名称:结构
答案 0 :(得分:1)
MSDN表示只有在流 NULL 时调用此Save()重载时才会出现ArgumentNullException。
您确定没有其他(省略?)代码不会使此流无效吗? 你确定这是例外的网站吗?
答案 1 :(得分:0)
忘了一步。我创建了EncoderParameter
对象,但未将其包含在EncoderParameters
集合中。这个消息使我感到困惑。
我添加后全部解决了:
myEncoderParameters.Param[0] = myEncoderParameter;