Интересный;что происходит здесь:
public void Save(Stream stream, ImageFormat format)
{
if (format == null)
{
throw new ArgumentNullException("format");
}
ImageCodecInfo encoder = format.FindEncoder();
this.Save(stream, encoder, null);
}
с внутренним Save
, выполняющим эту проверку:
public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
{
if (stream == null)
{
throw new ArgumentNullException("stream");
}
if (encoder == null)
{
throw new ArgumentNullException("encoder");
}
так;мы можем предположить, что format.FindEncoder();
возвращает null
здесь.Как это бывает, это действительно значение по умолчанию, если нет подходящего кодека:
internal ImageCodecInfo FindEncoder()
{
foreach (ImageCodecInfo info in ImageCodecInfo.GetImageEncoders())
{
if (info.FormatID.Equals(this.guid))
{
return info;
}
}
return null;
}
Так что в принципе это не ясно, но проблема в том, что не найден кодировщик для формата изображения, который выИспользуешь.Попробуйте сохранить как известный формат, не обязательно тот, из которого он загружен.Может быть, использовать ImageFormat.Png
и сохранить его как png?
img.Save(m, ImageFormat.Png);
и, как уже упоминалось в комментариях, чтобы получить base-64, вам понадобится:
ping = Convert.ToBase64String(m.GetBuffer(), 0, (int)m.Length);