プロジェクト内の画像がResources/myimage.jpgに保存されています。どうやってこの画像を動的にBitmapオブジェクトに読み込むことができますか?
Windowsフォームを使用していますか? Properties/Resources 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);
}
WithおよびImageBox "ImagePreview FormStrings.MyImageNames"には、通常のget/set文字列キャストメソッドが含まれています。これは、スクロールボックスタイプのリストにリンクされています。ビットマップはresources.resxにドラッグされます
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
私の場合 - 私は自分のリソースでアイコンを使っていましたが、いくつかのToolStripMenuItem
(s)にImagesとして動的に追加する必要がありました。そのため、私が作成したメソッド(以下のコードスニペットの元となる場所)では、MenuItem
に追加するためにアイコンリソースを返す前に、アイコンリソースをビットマップに変換する必要がありました。
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
あなたがそれらをあなたのリソースに追加するときあなたのimage/iconが名前にスペース( "")を持っているならば、VSがそれらのスペースを自動的に "_"(s)に置き換えるでしょう。なぜなら、リソースに名前を付けるときにスペースは有効な文字ではないからです。私が参照しているコードでReplace()
メソッドを使っているのはそのためです。あなたはおそらくその行を無視することができます。
以下のものを使用してください。これをWindowsフォームのグリッドビューセルでテストしました。
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
"Resource_Image"の名前は、プロジェクトから見つけることができます。
プロジェクトの名前の下に、Properties
があります。それを展開してください。そこにResources.resx
ファイルがあります。それを開く。ファイル名を「Resource_Image」として付けます。
JDSの答えは最もうまくいった。 C#のサンプル画像のロード:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
次の点に注意してください。
サンプルコード行は、VisualStudio 2015 Communityを使用して正常に実行されています。
私は提案します:
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/ja-jp/library/aa287676(v = vs.71).aspx
Image.FromStreamを使用すると、画像の形式(bmp、png、...)を知る必要がないため、より優れています。
このようにbmpをvarに保存することもできます。
var bmp = Resources.ImageName;
それが役に立てば幸い!
不思議なことに、デザイナーを覗いてみると、はるかに簡単な方法のように思えます。
画像は.Properties.Resourcesから入手できるようです。
私が興味を持っているのは、画像を貼り付けたコントロールに貼り付けることだけなので、単に画像を使用しています。
(ネット4.0、VS2010)
私は自分のプロジェクトのひとつからデザイナーコードを見て、それがこの記法を使っているのに気づいた
myButton.Image = global::MyProjectName.Properties.Resources.max;
maxは、プロジェクトにアップロードしたリソースの名前です。
あるいは、WPFまたはSilverlightを扱うとき、特にソース文字列がすでにXAMLマークアップにある場合は、この行を使用できます。
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
ImagePathは次のようになります。
string ImagePath = "/ProjectName;component/Resource/ImageName.png";