Resources / myimage.jpgに保存されているプロジェクトの画像があります。この画像をビットマップオブジェクトに動的に読み込むにはどうすればよいですか?
Resources / myimage.jpgに保存されているプロジェクトの画像があります。この画像をビットマップオブジェクトに動的に読み込むにはどうすればよいですか?
回答:
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);
}
typeof(this).Assembly
ショートパンツとしてもお使いいただけます。
typeof(this)
は動作しません。this.GetType().Assembly
はあなたが言ったことに最も近いですが、別のアセンブリにある可能性のある継承されたスーパークラスをピックアップするため、危険です。
typeof(this);
はコンパイルされません。あなたが得るError 1 Type expected
提案されたほとんどすべての回答よりもはるかに簡単
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
Bitmap
オブジェクトではなくオブジェクトも欲しがっていましたImage
。
いくつかのプロジェクトで使用しているコード...画像をアイコンではなくビットマップとしてのみリソースに保存することを前提としています
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);
}
プロジェクトのリソース設定で画像リソースとして追加するのが一番です。次に、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は、アセンブリにある任意のタイプです。
以下のいずれかを使用します。これをWindowsフォームのグリッドビューセルでテストしました。
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
「Resource_Image」の名前は、プロジェクトから見つけることができます。
プロジェクト名の下に、がありますProperties
。それを展開します。そこでResources.resx
ファイルを見ることができます。それを開く。ファイル名を「Resource_Image」として適用します。
「ImagePreview FormStrings.MyImageNames」という名前のImageBoxには、スクロールボックスタイプリストにリンクされている通常のget / set文字列キャストメソッドが含まれています。画像の名前は、.bmpの末尾を除いて、リスト上のリンクされた名前と同じです。すべてビットマップはresources.resxにドラッグされます
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
私の場合- リソースでアイコンを使用していましたが、次のように動的に追加する必要がありました画像をいくつかにToolStripMenuItem
(複数可)。したがって、私が作成したメソッド(以下のコードスニペットのソース)では、アイコンリソースをビットマップに変換してから、に追加する必要がありましたMenuItem
。
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
リソース/イメージに追加するときに、イメージ/アイコンの名前にスペース( "")が含まれている場合、VSはそれらのスペースを自動的に "_"(s)に置き換えます。リソースに名前を付ける場合、スペースは有効な文字ではないためです。これがReplace()
、参照コードでメソッドを使用している理由です。あなたはおそらくその行を無視することができます。
私は提案します:
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を使用する方が適切です。
JDSの回答が最も効果的でした。画像をロードするC#の例:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
次の点に注意してください。
サンプルコード行は、VisualStudio 2015 Communityを使用して正常に実行されます。
私は自分のプロジェクトの1つからデザイナーコードを見て、この表記法を使用していることに気付きました
myButton.Image = global::MyProjectName.Properties.Resources.max;
ここで、maxはプロジェクトにアップロードしたリソースの名前です。
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);