【C#】対象の画像形式かどうかを判定する ~ Image を使って ~

■ はじめに

 自分で作成しているアプリにおいて、サポートしている画像形式かどうかを判定するために
以下のサイトを参考に作成した
https://dobon.net/vb/dotnet/graphics/imagerawformat.html
しかし、テストをしてみると、連続して使うと、
System.Drawing.Image.FromFile() から OutOfMemory の例外を発生してしまう。

以下のサイトにその対応策を記載されていたので、整理する。
https://stackoverflow.com/questions/1108607/out-of-memory-exception-on-system-drawing-image-fromfile

■ サンプル

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      // 今回は「GIF」「JPEG」「PNG」画像以外は、Falseと判定する
      var imageFormats = new List<ImageFormat>()
      {
        ImageFormat.Gif,
        ImageFormat.Jpeg,
        ImageFormat.Png,
      };

      label1.Text = "Result : " + IsValidImage(textBox1.Text, imageFormats);
    }

    public bool IsValidImage(string imagePath, List<ImageFormat> supportImageFormats)
    {
      try
      {
        if (!File.Exists(imagePath))
        {
          return false;
        }

        // ここから
        using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
        using (Image targetImage = Image.FromStream(fileStream))
        {
          return supportImageFormats.Contains(targetImage.RawFormat);
        }
      }
      catch (Exception)
      {
        return false;
      }
    }
  }
}

関連記事

C#】画像かどうかを判定する ~ ImageCodecInfo / Bitmap を使って ~

https://blogs.yahoo.co.jp/dk521123/24965866.html