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) бросает исключение?
Любые предложения приветствуются.
Ответы
Ответ 1
Если вы загружаете образ с диска, вы можете использовать image.RawFormat
, чтобы сохранить это изображение в исходном формате. Однако не существует кодировщика, связанного с растровым изображением в памяти (именно это вы создаете в этом примере приложения), поэтому вам нужно будет указать формат изображения самостоятельно (т.е. ImageFormat.Bmp
).