.NET TIPS

VS.NETで画像などのリソースを利用するには?(準備編)

デジタルアドバンテージ
2004/10/08

 .NETアプリケーションでは、画像、アイコン、文字列などのリソースを利用することが多い。そこで本稿から始まり3つのTIPSに分けて、Windowsフォームでの画像リソースの利用手順を例に、.NETにおけるリソースの利用方法を紹介する(「リソース組込編」「リソース読込編」)。なお、Visual Studio .NET(以降、VS.NET)のIDEを利用したリソースの利用方法を中心に紹介し、コマンドラインによるリソース利用方法の詳細については割愛させていただくので、ご了承いただきたい。

 .NETアプリケーションで画像リソースを利用する場合、まず、次の2つのリソース形式(ファイル形式)が存在する。

1. 通常の画像ファイル(以降、「単純なリソース」。.jpgファイルや.gifファイルなど)
2. 型を指定した画像ファイル・データ(例えば、Bitmapクラスという型を指定したJPEG画像データなど)を含むリソース・ファイル(以降、「型指定されたリソース」。.resourcesファイル)
 「単純なリソース」は画像ファイルをそのまま使用するので、手軽に実装できるというメリットがある。その半面、(リソース・データの型が指定されていないために).NET Frameworkはそのリソース・データが何であるかを判別できない。つまり、開発者は楽だが、.NETプログラムはリソースを自動的に管理・操作できないこと(=完全なマネージ・リソースではないこと)を意味する。
 一方、「型指定されたリソース」は、型指定されたリソース・データを含むリソース・ファイル(.resourcesファイル)を作成しなければならないので(作成方法については後述)、少々面倒だというデメリットはあるが、.NET Frameworkはリソースの型を認識してリソースを自動的に管理・操作することができる(=完全なマネージ・リソースである)。

 以上の2つのリソース形式を、次のいずれかの方法で利用することになる。

1. 画像リソースを外部ファイルとして利用する方法(以降、「外部ファイル」)
2. 画像リソースをアセンブリ内部に埋め込んだファイルとして利用する方法(以降、「埋め込みファイル」)
 外部ファイルでリソースを利用する場合の利点は、ファイルを置き換えるだけでリソースを更新できることだが、逆に簡単にリソースを置き換えてほしくないような場合にはそれが欠点となるだろう。
 埋め込みファイルでリソースを利用する場合は、外部ファイルのようにリソース・ファイルや画像ファイルを置き換えるだけでリソースを更新できるという手軽さはなくなるが、リソースをアセンブリ内でまとめて管理できるというメリットがある。

 「2種類のリソース形式」×「外部ファイル/埋め込みファイル」で組み合わせると、リソースを利用する方法は(2×2で)4通りがあることになる。これに加え、リソースはVS.NETのWindowsフォーム・デザイナを用いても作成・管理することが可能だ。以上、合計5通りの方法を次の表にまとめた。

リソース形式
(単純/
型指定)
ファイル
(外部/
埋め込み)
リソース名 説明
単純なリソース 外部ファイル 外部画像ファイル アセンブリの外部に配置している画像ファイル(.jpgファイルや.gifファイルなど)
単純なリソース 埋め込みファイル マニフェスト・リソース アセンブリ内に追加されている画像ファイル
型指定されたリソース 外部ファイル 外部リソース・ファイル アセンブリの外部に配置されているリソース・ファイル(.resourcesファイル)
型指定されたリソース 埋め込みファイル 埋め込みリソース アセンブリ内に追加されているリソース・ファイル
型指定されたリソース 埋め込みファイル デザイナ・リソース アセンブリ内に追加されているリソース・ファイル。ただし、このリソースはVS.NETのWindowsフォーム・デザイナなどにより自動的に作成され、管理されるため、開発者は手動で編集しない方が無難だ
.NETにおけるリソース利用法の種類
リソース名などは、便宜上、筆者が命名したもので、必ずしもこのように呼ばれるとは限らないので注意すること(以降、この表のリソース名で記述していく)。

 表中のWindowsフォーム・デザイナで作成・管理される「デザイナ・リソース」は、「型指定されたリソース」で、かつ「埋め込みファイル」であり、「埋め込みリソース」と同じ種類のリソースであることが分かる。この両者の違いは、開発者が手動で編集するか(埋め込みリソース)、VS.NETが自動的に編集・管理するか(デザイナ・リソース)という点である。

 上記の表にある各リソースの「組み込み方法」と「読み込み方法」は「リソース組込編」「リソース読込編」にて解説しているが、本稿では、その前提知識として、「型指定されたリソース」を含むリソース・ファイル(.resourcesファイル)を作成する方法について解説しておく。

.resourcesファイルを作成するには?

 画像ファイルをそのまま利用する際には何の作業も必要ないが、型指定されたリソースを利用する場合にはリソース・ファイル(.resourcesファイル)を作成しなければならない。

 しかし、.resourcesファイルはバイナリ・ファイルであるため、開発者が手動で作成したり、編集したりするのは困難だ。そのため、リソースをテキスト・ベースのファイルとして記述し、それを変換して.resourcesファイルを作成する方法が用意されている。このテキスト・ファイルには次の2種類がある。

  • 「.txtファイル」(ただし、文字列リソースにのみ利用可能)
  • 「.resxファイル」(XML形式のファイル)

 この方法では、.txtファイルや.resxファイルといったテキスト・ファイルを作成・編集し、最終的にバイナリ・ベースの.resourcesファイルへ変換することにより、プログラムからリソースとして利用できるようになる。

.txtファイル
.resxファイル
(テキスト・ベース)
―<変換>→
.resourcesファイル
(バイナリ・ベース)

 .resourcesファイルへの変換は、コマンドラインの場合には「resgen.exe」というCUIツールを使えばよい(詳細はMSDN「リソース ファイル ジェネレータ (Resgen.exe)」)。本稿のようにVS.NETを使う場合には、IDEが自動的に変換してくれるので変換のための作業は発生しない(ただし、.resourcesファイルをアセンブリに埋め込んだ場合のみ。ファイルの埋め込み方法は「リソース組込編」にて解説する)。

 前述したようにリソースを記述するテキスト・ファイルとしては2つの種類があるが、本稿は画像リソースの利用を目的としているので、ここでは.resxファイルを利用する(.txtファイルの使い方については、「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?」を参考にするとよい)。

 .resxファイルは(XML形式のファイルなので)、テキスト・エディタで編集することも不可能ではないが、バイナリ・データである画像データをテキスト・ベースの.resxファイルに記述するには、画像データをテキスト・データにエンコードする必要がある。そのため実際には、.resxファイルを手動で編集することは現実的ではない。

●.resxファイルの作成と編集

 そこで本稿では、GUIツールの「reseditor」を使って、.resxファイルを作成・編集する方法を紹介する(なおVS.NET 2002/2003のIDEには、実は、.resxファイル用のリソース・エディタが含まれている。このエディタは、文字列リソースの入力・編集には重宝するが、残念ながら画像データを入力・編集できない。次期Visual Studio 2005では、この.resxファイル用のリソース・エディタが生まれ変わり、すべてのリソース編集作業が可能になるようだ)。

 reseditorは、VS.NETのインストール先に作成される.NET Framework SDK用フォルダ内の「\Samples\Tutorials\resourcesandlocalization\reseditor」フォルダにサンプル・プログラムとして提供されている。筆者の環境では、このフォルダのパスは次のとおりだ(このパスは、VS.NETのインストール環境により異なるので注意すること)。

【VS.NET 2002】
  C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK
\Samples\Tutorials\resourcesandlocalization\reseditor
【VS.NET 2003】
  C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1
\Samples\Tutorials\resourcesandlocalization\reseditor

 reseditorはソース・コードの形でインストールされているので、ビルドして使う必要がある。ビルド手順を含むreseditorの使用方法については、MSDNの「ResEditor を使用したリソース ファイルの作成および編集」を参照してほしい。

 次の画面は、実際にreseditorで.resxファイルを作成しているところだ。

GUIツール「reseditor」による.resxファイルの作成と編集
reseditorで.resxファイルを作成しているところ。
  リソースの型(この例では「System.Drawing.Bitmap」クラス)を指定する。
  リソースの名前(「キー名」とも呼ばれる。この例では「MyPicture2」)を指定する。
  [Add]ボタンをクリックすると、.resxファイルにリソース(で指定したリソース)が追加される。
  追加されたリソース(この例では「MyPicture2」)が表示される。
  [...](参照)ボタンをクリックすると表示される[ファイルを開く]ダイアログから、画像ファイル(.bmp、.gif、.jpg、.jpeg、.png、.icoなどのビットマップ・ファイル)を選択する。
  画像リソースの追加が終われば、メニュー・バーの[File]−[Save As]を選択すると[Save Resource File]ダイアログが表示される。そのダイアログから、.resxファイルを保存する。なお、このダイアログで保存可能な[ファイルの種類]は、「Resource Files(.resourcesファイル)」と「ResX Files(.resxファイル)」である。ここから分かるように、reseditorを使えば、.resxファイルを介することなく、直接、.resourcesファイルを作成・編集することも可能だ。

 ここまでで、リソース・ファイル(.resourcesファイル)の作成方法について説明した。

 今回の内容を踏まえて、「リソース組込編」で、リソース・ファイルや画像ファイルをアセンブリに埋め込む方法を解説し、さらに「リソース読込編」で、リソースの読み込み方法について解説する。End of Article

カテゴリ:Windowsフォーム 処理対象:リソース
カテゴリ:クラス・ライブラリ 処理対象:リソース
カテゴリ:Visual Studio .NET 処理対象:リソース
関連TIPS:VS.NETで画像などのリソースを利用するには?(組込編)
関連TIPS:VS.NETで画像などのリソースを利用するには?(読込編)
 
この記事と関連性の高い別の.NET TIPS
文字列リソースを活用するには?
VS.NETで画像などのリソースを利用するには?(読込編)
独自の.resxファイルの文字列リソースを活用するには?
VS.NETで画像などのリソースを利用するには?(組込編)
[ASP.NET AJAX]ローカリゼーション対応を行うには?(アセンブリ組み込み編)
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間