RawFormatを使用してビットマップイメージを保存しているときに、「値をnullにすることはできません。\ r\nパラメータ名:エンコーダ」エラーが表示されます。サンプルコード:
_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());
}
}
}
_
以下のコードはnullを返すため、RawFormatはImageEncoderの既存のリストに存在しません。
var imageCodecInfo = ImageCodecInfo.GetImageEncoders().FirstOrDefault(codec => codec.FormatID == image.RawFormat.Guid);
注:画像は任意のタイプ(JPEG、BMP、PNG)などです。Image.Save()はimage.RawFormatで動作するはずです。 RawFormatはビットマップタイプではありません。 image.RawFormatをImageFormat.Bmpに変更すると、保存操作は成功します。
以下のリンクを参照しましたが、画像タイプに依存しないようにするものは見つかりませんでした。
Image.Saveクラッシュ:{"値をnullにすることはできません。\ r\nパラメータ名:エンコーダー"}Image.Save(Stream、ImageFormat)が例外をスローする理由
どんな提案でも大歓迎です。
ディスクからイメージをロードする場合、image.RawFormat
を使用して、元の形式を使用してそのイメージを保存できます。ただし、メモリ内ビットマップに関連付けられたエンコーダーはありません(このサンプルアプリケーションで作成しているものです)。そのため、ユーザー自身で画像形式を指定する必要があります(例:ImageFormat.Bmp
)。
これを使用でき、修正されます:
image.Save(stream,ImageFormat.Jpeg);