リソースデザイナーで「既存のアイテムを追加」をクリックしてリソースを追加しようとすると、「リソース」フォルダーにアイテムが配置されます。
問題は、Resource ディレクトリに新しいディレクトリを作成してそこにリソースを配置すると、ファイルが見つからないというコンパイラ エラーが発生することです。
2500 個の画像を追加する必要があり、それらのいくつかは名前と一致するため、すべてのリソースを 1 つのフォルダーに入れることはできません。
リソースデザイナーで「既存のアイテムを追加」をクリックしてリソースを追加しようとすると、「リソース」フォルダーにアイテムが配置されます。
問題は、Resource ディレクトリに新しいディレクトリを作成してそこにリソースを配置すると、ファイルが見つからないというコンパイラ エラーが発生することです。
2500 個の画像を追加する必要があり、それらのいくつかは名前と一致するため、すべてのリソースを 1 つのフォルダーに入れることはできません。
Resources フォルダーの下に画像を追加する必要はありません。画像を任意のフォルダーに追加し、画像のビルド アクションを「埋め込みリソース」に設定できます。そうすれば、リソースとしてアセンブリにコンパイルされます。ただし、画像が多数ある場合にパフォーマンスの問題が発生するかどうかはわかりません...
更新: 詳細:
これにより、イメージ ファイルがリソースとしてアセンブリにコンパイルされます。各ファイルには、次のパターンに従ってリソース名が割り当てられます: <root namespace for the assembly>.<folder name>.<image file name>
. 次のコードを使用して画像をロードできます。
using(Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("<root namespace for the assembly>.<folder name>.<image file name>"))
{
pictureBox1.Image = Image.FromStream(stream);
}
新しいリソース ファイルを作成します (次の例では、フォルダー resx で Images01 と呼びます)。カスタム リソース マネージャー クラスを作成し、作成したばかりのこのファイルを指すように初期化します。
ResourceManager rm = new ResourceManager("ROOTNAMESPACE.resx.Images01",
System.Reflection.Assembly.GetExecutingAssembly());
メソッドを GetImage に実装する
public static Image GetImage(string fileName)
{
Stream stream = GetResourceStream(fileName);
Image image = null;
if (stream != null)
{
image = Image.FromStream(stream);
}
return image;
}
この resx ファイルに画像を追加します
そして、次のようにコードで使用できます
this.picProject.Image = Resources.GetImage("ImageName.png");
それが役に立てば幸い