WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

リソースから画像を取得する際の注意点

by WebSurfer 2018年2月6日 17:02

リソースから画像を取得すると、取得するたび毎回新しい Bitmap オブジェクトが生成されるいう話を書きます。(元の話は MSDN Forum のスレッド「C#でのIF文を使ったフォーム背景画像の設定方法について」のものです)

リソースの画像

Visual Studio 2015 のテンプレートから Windows Forms アプリを生成すると、Properties フォルダ下にリソースファイル Resources.resx と厳密に型指定されたリソースクラス Resources.Designer.cs が自動生成されます。上の画像は、そのリソースに .png ファイルを追加したものです。

そうすると、厳密に型指定されたリソースクラス Resources.Designer.cs に以下のコードが自動生成されて、image プロパティでリソースの .png ファイルから Bitmap オブジェクトを取得できるようになります。

internal static System.Drawing.Bitmap image {
  get {
    object obj = 
      ResourceManager.GetObject("image", resourceCulture);
    return ((System.Drawing.Bitmap)(obj));
  }
}

image プロパティは ResourceManager.GetObject メソッドを使っているところに注目してください。

MSDN ライブラリ ResourceManager.GetObject メソッド (String, CultureInfo) の説明によると "同じ name パラメーターで GetObject メソッドを複数回呼び出した場合、戻り値が同じオブジェクトの参照になるとは限りません・・・" とありますが、画像の場合は毎回新しい Bitmap オブジェクトが生成されるようです。

リソースから画像取得

上の画像で isEqual1 が false になることがそれを裏付けていると思います。isEqual2 は当然ながら true になります。

それがどうしたって言われそうですが、自分としては新しい発見だったということで備忘録として書いておくことにしました。(笑)

Tags: ,

.NET Framework

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  2018年11月  >>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

View posts in large calendar