private static EncoderParameters GetQualityEncoderParameters(Image image, ImageCodecInfo encoder, int? quality, int? absoluteQuality) { if ((absoluteQuality.HasValue || quality.HasValue) && CanSetQuality(encoder)) { int? _quality = null; var oldQuality = 0; try { oldQuality = image.GetEncoderParameterList(System.Drawing.Imaging.Encoder.Quality.Guid) .Param.Select(p => p.NumberOfValues).FirstOrDefault(); } catch { } if (absoluteQuality.HasValue) { if (oldQuality < absoluteQuality.Value) { _quality = absoluteQuality; } } else if (quality.HasValue) { if (oldQuality != quality.Value) { _quality = quality; } } if (_quality.HasValue) { var parameters = new EncoderParameters(1); parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, _quality.Value); return parameters; } } return null; }