Подтвердить что ты не робот

Image.Save() throws exception "Значение не может быть null./r/nParameter name: encoder"

Я получаю значение "Значение не может быть null.\r\nParameter name: encoder" при сохранении растрового изображения с использованием RawFormat. Пример кода:

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var image = new System.Drawing.Bitmap(500, 400);
            var stream = new MemoryStream();
            image.Save(stream, image.RawFormat);
        }
        catch (Exception exp)
        {
            Console.WriteLine(exp.ToString());
        }
    }
}

RawFormat не существует в существующем списке ImageEncoders, так как ниже код возвращает null.

var imageCodecInfo = ImageCodecInfo.GetImageEncoders().FirstOrDefault(codec => codec.FormatID == image.RawFormat.Guid);

Примечание. Изображение может быть любого типа (JPEG, BMP, PNG) и т.д. Image.Save() должен работать на image.RawFormat. RawFormat не является типом Bitmap. Если я изменил изображение .RawFormat на ImageFormat.Bmp, операция сохранения завершится успешно.

Ссылки ниже, но ничего не найдено для того, чтобы сделать его независимым от типа изображения.

Image.Save crashing: { "Значение не может быть null.\r\nParameter name: encoder" } Почему Image.Save(Stream, ImageFormat) бросает исключение?

Любые предложения приветствуются.

4b9b3361

Ответ 1

Если вы загружаете образ с диска, вы можете использовать image.RawFormat, чтобы сохранить это изображение в исходном формате. Однако не существует кодировщика, связанного с растровым изображением в памяти (именно это вы создаете в этом примере приложения), поэтому вам нужно будет указать формат изображения самостоятельно (т.е. ImageFormat.Bmp).