232

私のプロジェクトには Resources/myimage.jpg に保存された画像があります。この画像を Bitmap オブジェクトに動的にロードするにはどうすればよいですか?

4

16 に答える 16

265

Windows フォームを使用していますか? プロパティ/リソース UI を使用して画像を追加した場合は、生成されたコードから画像にアクセスできるため、次のように簡単に実行できます。

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
于 2009-07-28T05:29:52.823 に答える
122

次の方法で画像への参照を取得できます。

Image myImage = Resources.myImage;

画像のコピーを作成する場合は、次の操作を行う必要があります。

Bitmap bmp = new Bitmap(Resources.myImage);

使い終わったらbmpを破棄することを忘れないでください。コンパイル時にリソース イメージの名前がわからない場合は、リソース マネージャーを使用できます。

ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");

ResourceManager の利点は、Resources.myImage が通常は範囲外になる場所や、動的にリソースにアクセスしたい場所で使用できることです。さらに、これはサウンド、設定ファイルなどでも機能します。

于 2009-07-28T05:30:05.037 に答える
73

リソースストリームからロードする必要があります。

Bitmap bmp = new Bitmap(
  System.Reflection.Assembly.GetEntryAssembly().
    GetManifestResourceStream("MyProject.Resources.myimage.png"));

アセンブリ内のすべてのリソース名を知りたい場合は、次のようにします。

string[] all = System.Reflection.Assembly.GetEntryAssembly().
  GetManifestResourceNames();

foreach (string one in all) {
    MessageBox.Show(one);
}
于 2009-07-28T05:31:08.157 に答える
29

提案されたほとんどすべての回答よりもはるかに簡単です

tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
于 2012-06-12T15:18:23.283 に答える
14

最善の方法は、プロジェクトのリソース設定で画像リソースとして追加することです。次に、Resources.myimage を実行して画像を直接取得できます。これにより、生成された C# プロパティを介して画像が取得されます。

画像を埋め込みリソースとして設定しただけの場合は、次の方法で取得できます。

string name = "Resources.myimage.jpg"
string namespaceName = "MyCompany.MyNamespace";
string resource = namespaceName + "." + name;
Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);
Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource));

MyTypeFromSameAssemblyAsResource は、アセンブリにある任意の型です。

于 2009-07-28T05:31:25.533 に答える
13

私のプロジェクトのいくつかで使用するコード...アイコンではなくビットマップとしてのみリソースに画像を保存することを前提としています

    public static Bitmap GetImageByName(string imageName)
    {
        System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
        string resourceName = asm.GetName().Name + ".Properties.Resources";
        var rm = new System.Resources.ResourceManager(resourceName, asm);
        return (Bitmap)rm.GetObject(imageName);

    }
于 2013-03-16T13:04:29.687 に答える
7

JDSの答えが最もうまくいきました。C# の読み込みイメージの例:

  • 画像をリソースとして含めます (プロジェクト ツリー -> リソース、右クリックして目的のファイル ImageName.png を追加します)。
  • 埋め込みリソース (プロジェクト ツリー -> リソース -> ImageName.png、右クリックでプロパティを選択)
  • .pngファイル形式(.bmp .jpgでもOK)

pictureBox1.Image = ProjectName.Properties.Resources.ImageName;

次の点に注意してください。

  • リソース画像ファイルは「ImageName.png」で、ファイル拡張子は省略してください。
  • ProjectName は、おそらく「アセンブリ名」としてより適切に理解される可能性があります。これは、Project->Properties ページのそれぞれのテキスト エントリになります。

サンプル コード ラインは、VisualStudio 2015 Community を使用して正常に実行されます。

于 2015-07-24T18:48:13.153 に答える
5

With および ImageBox という名前の "ImagePreview FormStrings.MyImageNames には、スクロール ボックス タイプ リストにリンクされている通常の get/set 文字列キャスト メソッドが含まれています。画像は、.bmp 末尾を除いて、リスト上のリンクされた名前と同じ名前を持ちます。すべてビットマップは resources.resx にドラッグされます

Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
于 2011-12-10T21:36:10.273 に答える
5

私は提案します:

System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);

msdn から: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx

画像の形式 (bmp、png、...) を知る必要がないため、Image.FromStream を使用することをお勧めします。

于 2013-09-09T08:52:23.963 に答える
5

私の場合、リソースでアイコンを使用していましたが、それらをいくつかの画像ToolStripMenuItemとして動的に追加する必要がありました。そのため、作成したメソッド (以下のコード スニペットの由来) では、アイコン リソースをビットマップに変換してから、MenuItem.

string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();

リソースに追加するときに画像/アイコンの名前にスペース (" ") が含まれている場合、VS はそれらのスペースを自動的に "_"(s) に置き換えます。リソースに名前を付ける場合、スペースは有効な文字ではないためです。Replace()これが、参照コードでメソッドを使用している理由です。おそらくその行は無視できます。

于 2012-12-10T18:01:12.177 に答える
2

私のプロジェクトの 1 つからデザイナー コードを見て、この表記法が使用されていることに気付きました

myButton.Image = global::MyProjectName.Properties.Resources.max;

max は、プロジェクトにアップロードしたリソースの名前です。

于 2013-11-19T10:15:02.007 に答える
2

奇妙なことに、デザイナーを調べてみると、もっと単純なアプローチのように見えるものを見つけました。

画像は .Properties.Resources から入手できるようです。

私が興味を持っているのは、画像のあるコントロールに画像を貼り付けることだけなので、単に画像を使用しています。

(ネット 4.0、VS2010)

于 2012-05-15T03:38:44.920 に答える
-1
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(444, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost");

ToolStripButton btn = new ToolStripButton("m1");
btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
btn.Image = (Image)O;
this.toolStrip1.Items.Add(btn);
于 2014-12-16T10:06:39.907 に答える