【问题标题】:Error on adjusting jpeg quality: Value cannot be null.Parameter name: structure调整 jpeg 质量时出错:值不能为空。参数名称:结构
【发布时间】:2014-05-18 21:48:38
【问题描述】:

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

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”类型的异常,但未在用户代码中处理

消息是:

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    MSDN 表示仅当流为 NULL 时调用此 Save() 重载时才会出现 ArgumentNullException。

    您确定没有其他(省略?)代码不会使该流无效吗? 您确定这是异常发生的地点吗?

    【讨论】:

    • 这就是我所看到的,但事实证明我没有将正确的参数添加到我的参数集合中,并且在我有机会删除这个问题之前你偷偷地回答了 ;)
    【解决方案2】:

    忘记了一步。我创建了EncoderParameter 对象,但没有将它包含在EncoderParameters 集合中。这个消息让我有点困惑。

    添加后全部解决:

    myEncoderParameters.Param[0] = myEncoderParameter;
    

    【讨论】:

    • 这为我省去了很多麻烦。如此简单的疏忽,但感谢您指出!
    猜你喜欢
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2014-05-17
    • 2016-05-14
    相关资源
    最近更新 更多