私のプロジェクトには Resources/myimage.jpg に保存された画像があります。この画像を Bitmap オブジェクトに動的にロードするにはどうすればよいですか?
16 に答える
Windows フォームを使用していますか? プロパティ/リソース UI を使用して画像を追加した場合は、生成されたコードから画像にアクセスできるため、次のように簡単に実行できます。
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
次の方法で画像への参照を取得できます。
Image myImage = Resources.myImage;
画像のコピーを作成する場合は、次の操作を行う必要があります。
Bitmap bmp = new Bitmap(Resources.myImage);
使い終わったらbmpを破棄することを忘れないでください。コンパイル時にリソース イメージの名前がわからない場合は、リソース マネージャーを使用できます。
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
ResourceManager の利点は、Resources.myImage が通常は範囲外になる場所や、動的にリソースにアクセスしたい場所で使用できることです。さらに、これはサウンド、設定ファイルなどでも機能します。
リソースストリームからロードする必要があります。
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);
}
提案されたほとんどすべての回答よりもはるかに簡単です
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
最善の方法は、プロジェクトのリソース設定で画像リソースとして追加することです。次に、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 は、アセンブリにある任意の型です。
私のプロジェクトのいくつかで使用するコード...アイコンではなくビットマップとしてのみリソースに画像を保存することを前提としています
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);
}
JDSの答えが最もうまくいきました。C# の読み込みイメージの例:
- 画像をリソースとして含めます (プロジェクト ツリー -> リソース、右クリックして目的のファイル ImageName.png を追加します)。
- 埋め込みリソース (プロジェクト ツリー -> リソース -> ImageName.png、右クリックでプロパティを選択)
- .pngファイル形式(.bmp .jpgでもOK)
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
次の点に注意してください。
- リソース画像ファイルは「ImageName.png」で、ファイル拡張子は省略してください。
- ProjectName は、おそらく「アセンブリ名」としてより適切に理解される可能性があります。これは、Project->Properties ページのそれぞれのテキスト エントリになります。
サンプル コード ラインは、VisualStudio 2015 Community を使用して正常に実行されます。
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;
私は提案します:
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 を使用することをお勧めします。
私の場合、リソースでアイコンを使用していましたが、それらをいくつかの画像ToolStripMenuItem
として動的に追加する必要がありました。そのため、作成したメソッド (以下のコード スニペットの由来) では、アイコン リソースをビットマップに変換してから、MenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
リソースに追加するときに画像/アイコンの名前にスペース (" ") が含まれている場合、VS はそれらのスペースを自動的に "_"(s) に置き換えます。リソースに名前を付ける場合、スペースは有効な文字ではないためです。Replace()
これが、参照コードでメソッドを使用している理由です。おそらくその行は無視できます。
私のプロジェクトの 1 つからデザイナー コードを見て、この表記法が使用されていることに気付きました
myButton.Image = global::MyProjectName.Properties.Resources.max;
max は、プロジェクトにアップロードしたリソースの名前です。
奇妙なことに、デザイナーを調べてみると、もっと単純なアプローチのように見えるものを見つけました。
画像は .Properties.Resources から入手できるようです。
私が興味を持っているのは、画像のあるコントロールに画像を貼り付けることだけなので、単に画像を使用しています。
(ネット 4.0、VS2010)
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);