9

リソースデザイナーで「既存のアイテムを追加」をクリックしてリソースを追加しようとすると、「リソース」フォルダーにアイテムが配置されます。

問題は、Resource ディレクトリに新しいディレクトリを作成してそこにリソースを配置すると、ファイルが見つからないというコンパイラ エラーが発生することです。

2500 個の画像を追加する必要があり、それらのいくつかは名前と一致するため、すべてのリソースを 1 つのフォルダーに入れることはできません。

4

2 に答える 2

10

Resources フォルダーの下に画像を追加する必要はありません。画像を任意のフォルダーに追加し、画像のビルド アクションを「埋め込みリソース」に設定できます。そうすれば、リソースとしてアセンブリにコンパイルされます。ただし、画像が多数ある場合にパフォーマンスの問題が発生するかどうかはわかりません...

更新: 詳細:

  1. フォルダーとイメージ ファイルをプロジェクト アイテムとしてプロジェクトに追加します (各フォルダーとその中のイメージをソリューション エクスプローラーで確認できるようにします)。
  2. 各イメージ ファイルの Build Action プロパティを "Embedded Resource" に設定します (複数のファイルに対して同時にこれを行うことができます。ソリューション エクスプローラーですべてのイメージ ファイルを選択するだけです)。

これにより、イメージ ファイルがリソースとしてアセンブリにコンパイルされます。各ファイルには、次のパターンに従ってリソース名が割り当てられます: <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);
}
于 2009-05-13T18:51:44.777 に答える
2

新しいリソース ファイルを作成します (次の例では、フォルダー 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");

それが役に立てば幸い

于 2009-05-13T19:06:58.447 に答える