Ich habe ein Bild in meinem Projekt unter Resources/myimage.jpg gespeichert. Wie kann ich dieses Bild dynamisch in das Bitmap-Objekt laden?Laden Bild aus Ressourcen Bereich des Projekts in C#
Antwort
Verwenden Sie Windows Forms? Wenn Sie das Bild mit Hilfe der Eigenschaften/Ressourcen UI hinzugefügt haben, haben Sie Zugriff auf das Bild von generierten Code zu bekommen, so können Sie einfach tun:
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Nein, es wird als eine einfache Datei in den Ordner Ressourcen hinzugefügt. –
Ah ok. In diesem Fall denke ich @ Hallgrim hat die Antwort für Sie mit Ressourcen-Streams. Wenn Sie Windows Forms * benutzen, würde ich Sie dringend bitten, das Bild zu löschen und es erneut von der Benutzeroberfläche hinzuzufügen - viel einfacher so. –
Sie können einen Verweis auf das Bild erhalten die folgende Art und Weise:
Image myImage = Resources.myImage;
Wenn Sie eine Kopie des Bildes machen wollen, müssen Sie folgendes tun: vergessen
Bitmap bmp = new Bitmap(Resources.myImage);
nicht o zu entsorgen f bmp wenn Sie damit fertig sind. Wenn Sie nicht den Namen der Ressource Bild zur Compile-Zeit kennen, können Sie einen Ressourcenmanager verwenden:
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
Der Vorteil der Resourcemanager ist, dass Sie es verwenden können, wo Resources.myImage normalerweise würde sein von Bereich, oder wo Sie dynamisch auf Ressourcen zugreifen möchten. Darüber hinaus funktioniert dies für Sounds, Konfigurationsdateien usw.
Sie müssen es aus Ressourcen-Stream laden.
Bitmap bmp = new Bitmap(
System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceStream("MyProject.Resources.myimage.png"));
Wenn Sie alle Ressourcennamen in Ihrer Assembly wissen wollen, gehen Sie mit:
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}
Sie sollten Reflektionen nicht verwenden müssen - dies erscheint angesichts der einfacheren verfügbaren Methoden zu kompliziert. –
Diese Lösung funktioniert nicht in C#/Windows Phone. NETCF - GetManifestResourceNames() gibt nur einen einzelnen Namen zurück, nämlich den des Assembly-DLL-Moduls. Im Manifest ist nur eine Ressource verfügbar - der Stream-Blob des DLL-Moduls. Ohne C++ und unsicheren Code, mit denen Sie Win32-API-Aufrufe aufrufen können, ist es ehrlich gesagt ein roher Schmerz in den Arsch, mit diesem Stück Speicher zu arbeiten. –
Sie können auch kurz "typeof (this) .Assembly" verwenden. –
Das Beste, was sie als Bild Ressourcen in den Ressourceneinstellungen im Projekt hinzuzufügen ist. Dann können Sie das Bild direkt abrufen, indem Sie Resources.myimage ausführen. Dies wird das Bild über eine generierte C# -Eigenschaft erhalten.
Wenn Sie nur das Bild als Eingebettete Ressource festlegen können Sie es mit:
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));
Wo MyTypeFromSameAssemblyAsResource jede Art, die Sie in Ihrer Assembly haben.
Was ist' Typ'? – radbyx
"Namespace" kann nicht als Variablenname verwendet werden und wie Sie zu MyTypeFromSameAssemblyAsResource gelangen, wäre wünschenswert. –
Fehler behoben, der Jasons Problem anspricht –
Mit und ImageBox den Namen „ImagePreview FormStrings.MyImageNames enthält ein regelmäßigen get/set-String Gussverfahren, das zu einer scrollbox Typenliste verknüpft ist. Die Bilder haben die gleichen Namen wie die verknüpften Namen auf der Liste, mit Ausnahme von . die .bmp Endungen Alle Bitmaps werden in die resources.resx gezogen
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
Merkwürdigerweise von Stossen im Designer finde ich, was eine viel einfachere Lösung zu sein scheint:
Das Bild scheint zu sein, verfügbar von .Properties.Resources.
Ich verwende einfach ein Bild, da alles, was mich interessiert, es in ein Steuerelement mit einem Bild einfügen wird.
(Net 4.0, VS2010.
)Way einfacher als die meisten alle vorgeschlagenen Antworten
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
In meinem Fall - ich wurde mit Icons in meiner Ressource, aber ich brauchte sie dynamisch als Bilder hinzufügen einige ToolStripMenuItem
(s). Also musste ich in der Methode, die ich erstellt habe (wo das Code-Snippet unten herkommt), die Icon-Ressourcen in Bitmaps konvertieren, bevor ich sie für die Addition zu meinem MenuItem
zurückgeben konnte.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Etwas anderes bewusst zu sein, wenn Ihr Bild/Symbol Räume hat (“„) _ ‚(s) in seinem Namen, wenn Sie sie auf Ihre Ressource hinzufügen, VS werden diese Räume mit automatisch ersetzen‘. Denn Leerzeichen sind kein gültiges Zeichen beim Benennen Ihrer Ressource. Deshalb verwende ich die Replace()
Methode in meinem referenzierten Code. Sie können diese Zeile wahrscheinlich ignorieren.
-Code verwende ich in mehreren meiner Projekte ... Es geht davon aus, dass Sie speichern Bilder in Ressource nur als Bitmaps nicht Symbole
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);
}
Das ist sehr nett. Vielen Dank :) – Derrick
Ich schlage vor:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);
Von Msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Die Verwendung von Image.FromStream ist besser, weil Sie das Format des Bildes (bmp, png, ...) nicht kennen müssen.
ich an der Designer-Code von einem meiner Projekte sah und bemerkte, dass es diese Art der Notation
verwendetmyButton.Image = global::MyProjectName.Properties.Resources.max;
wobei max der Name der Ressource, die ich in das Projekt hochgeladen.
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);
Oder Sie könnten diese Linie verwenden, wenn sie mit WPF oder Silverlight zu tun, vor allem wenn Sie die Quellzeichenfolge bereits im XAML-Markup haben:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
Wo die ImagePath ist so etwas wie:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";
Die Antwort von JDS hat am besten funktioniert. C# Beispiel Lade Bild:
- Das Bild kann als Ressource (Projekt tree-> Ressourcen der rechten Maustaste die gewünschte Datei ImageName.png hinzufügen)
- Eingebettete Ressource (Projekt tree-> Ressourcen-> ImageName.png klicken Sie rechts wählen Sie Eigenschaften)
- .png-Datei-Format (.bmp .jpg auch OK)
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Beachten Sie Folgendes sein sollte:
Die Beispielcodezeile wird erfolgreich mit VisualStudio 2015 Community ausgeführt.
Sie können auch die bmp in einem var wie folgt speichern:
var bmp = Resources.ImageName;
hoffe, es hilft!
Blick auf diese Antwort: http://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/7375570#7375570 – Roland
Dies war eine Frage das wurde später gefragt, ist aber verwandt, wenn nicht ein Duplikat: http://stackoverflow.com/questions/13592150/load-image-from-resources – vapcguy