Verwenden Sie Windows Forms? Wenn Sie das Bild über die Benutzeroberfläche "Eigenschaften / Ressourcen" hinzugefügt haben, erhalten Sie über den generierten Code Zugriff auf das Bild. Sie können dies also einfach tun:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Nein, es wird als einfache Datei zum Ordner Ressourcen hinzugefügt.
Pavel Bastov
9
Ah ok. In diesem Fall hat @ Hallgrim die Antwort für Sie mithilfe von Ressourcenströmen. Wenn Sie sind mit Windows Forms würde ich Sie bitten , um das Bild zu löschen und neu hinzufügen , es aus dem UI - viel einfacher , auf diese Weise.
Matt Hamilton
114
Sie können auf folgende Weise einen Verweis auf das Bild erhalten:
Image myImage =Resources.myImage;
Wenn Sie eine Kopie des Bildes erstellen möchten , müssen Sie folgende Schritte ausführen:
Bitmap bmp =newBitmap(Resources.myImage);
Vergessen Sie nicht, bmp zu entsorgen, wenn Sie damit fertig sind. Wenn Sie den Namen des Ressourcenabbilds zur Kompilierungszeit nicht kennen, können Sie einen Ressourcenmanager verwenden:
Der Vorteil des ResourceManager besteht darin, dass Sie ihn dort verwenden können, wo Resources.myImage normalerweise außerhalb des Gültigkeitsbereichs liegt oder wo Sie dynamisch auf Ressourcen zugreifen möchten. Darüber hinaus funktioniert dies für Sounds, Konfigurationsdateien usw.
Hinweis: Verwenden Sie Properties.Resources.myImage.
Splattne
Ich versuche, das Ressourcenobjekt an mein Datagrid zu binden, aber es wird mit Ihrer Methode nicht angezeigt. Die Datagrid-Bildspalte ist mit Vorlagen versehen.
Sie sollten keine Reflexion verwenden müssen - dies erscheint angesichts der einfacheren verfügbaren Methoden zu kompliziert.
Charlie Salts
Diese Lösung funktioniert nicht in C # / Windows Phone .NETCF - GetManifestResourceNames () gibt nur einen einzigen Namen zurück, 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 dem Sie Win32-API-Aufrufe aufrufen können, ist es ehrlich gesagt ein königlicher Schmerz, mit diesem Speicherblock zu arbeiten.
Mark Jones
2
Sie können auch typeof(this).Assemblykurz verwenden.
Sri Harsha Chilakapati
1
@ SriHarshaChilakapati typeof(this)wird nicht funktionieren. this.GetType().Assemblyist dem, was Sie gesagt haben, am nächsten, aber es ist riskant, weil es eine geerbte Superklasse aufgreift, die sich möglicherweise in einer anderen Baugruppe befindet.
John Gibb
2
@SriHarshaChilakapati typeof(this);kompiliert nicht. Du erhältstError 1 Type expected
John Gibb
26
Viel einfacher als die meisten vorgeschlagenen Antworten
Auf diese Weise kann nicht zugegriffen werden, wenn die Datei nicht Teil des Ressourcenmanifests ist, da das OP eindeutig angibt, dass sie nur als Datei hinzugefügt wurde.
Wobbles
1
Er wollte auch ein BitmapObjekt, kein ImageObjekt.
Vapcguy
13
Code, den ich in mehreren meiner Projekte verwende ... Es wird davon ausgegangen, dass Sie Bilder nur als Bitmaps und nicht als Symbole in der Ressource speichern
Am besten fügen Sie sie als Bildressourcen in den Ressourceneinstellungen des Projekts hinzu. Dann können Sie das Bild direkt abrufen, indem Sie Resources.myimage ausführen. Dadurch wird das Bild über eine generierte C # -Eigenschaft abgerufen.
Wenn Sie das Bild nur als eingebettete Ressource festlegen, erhalten Sie es mit:
string name ="Resources.myimage.jpg"string namespaceName ="MyCompany.MyNamespace";string resource = namespaceName +"."+ name;Type type =typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);Bitmap image =newBitmap(type.Assembly.GetManifestResourceStream(resource));
Wobei MyTypeFromSameAssemblyAsResource ein beliebiger Typ ist, den Sie in Ihrer Assembly haben.
Unter dem Namen des Projekts finden Sie Properties. Es ausweiten. Dort können Sie Resources.resxDatei sehen. Öffne es. Wenden Sie Ihren Dateinamen als "Resource_Image" an.
Mit und ImageBox mit dem Namen "ImagePreview FormStrings.MyImageNames" enthält eine reguläre Methode zum Abrufen / Festlegen von Zeichenfolgen, die mit einer Liste von Bildlauffeldtypen verknüpft sind. Die Bilder haben dieselben Namen wie die verknüpften Namen in der Liste, mit Ausnahme der .bmp-Endungen. Alle Bitmaps werden in die Datei resources.resx gezogen
In meinem Fall - Ich habe Symbole in meiner Ressource verwendet, musste sie jedoch dynamisch als Bilder zu einigen hinzufügen ToolStripMenuItem. Bei der von mir erstellten Methode (von der das folgende Codefragment stammt) musste ich die Symbolressourcen in Bitmaps konvertieren, bevor ich sie zur Ergänzung zu meiner zurückgeben konnte MenuItem.
Beachten Sie Folgendes: Wenn Ihr Bild / Symbol beim Hinzufügen zu Ihrer Ressource Leerzeichen ("") enthält, ersetzt VS diese Leerzeichen automatisch durch "_" (s). Weil Leerzeichen beim Benennen Ihrer Ressource kein gültiges Zeichen sind. Aus diesem Grund verwende ich die Replace()Methode in meinem Code, auf den verwiesen wird. Sie können diese Zeile wahrscheinlich einfach ignorieren.
Die Antwort von JDS funktionierte am besten. C # Beispiel zum Laden eines Bildes:
Fügen Sie das Bild als Ressource ein (Projektbaum-> Ressourcen, klicken Sie mit der rechten Maustaste, um die gewünschte Datei ImageName.png hinzuzufügen).
Die Ressourcenbilddatei lautet "ImageName.png", die Dateierweiterung sollte weggelassen werden.
Projektname kann möglicherweise besser als "Baugruppenname" verstanden werden, der der entsprechende Texteintrag auf der Seite Projekt-> Eigenschaften sein soll.
Die Beispielcodezeile wird erfolgreich mit VisualStudio 2015 Community ausgeführt.
Oder Sie können diese Zeile verwenden, wenn Sie mit WPF oder Silverlight arbeiten, insbesondere wenn Sie die Quellzeichenfolge bereits im XAML-Markup haben:
Antworten:
Verwenden Sie Windows Forms? Wenn Sie das Bild über die Benutzeroberfläche "Eigenschaften / Ressourcen" hinzugefügt haben, erhalten Sie über den generierten Code Zugriff auf das Bild. Sie können dies also einfach tun:
quelle
Sie können auf folgende Weise einen Verweis auf das Bild erhalten:
Wenn Sie eine Kopie des Bildes erstellen möchten , müssen Sie folgende Schritte ausführen:
Vergessen Sie nicht, bmp zu entsorgen, wenn Sie damit fertig sind. Wenn Sie den Namen des Ressourcenabbilds zur Kompilierungszeit nicht kennen, können Sie einen Ressourcenmanager verwenden:
Der Vorteil des ResourceManager besteht darin, dass Sie ihn dort verwenden können, wo Resources.myImage normalerweise außerhalb des Gültigkeitsbereichs liegt oder wo Sie dynamisch auf Ressourcen zugreifen möchten. Darüber hinaus funktioniert dies für Sounds, Konfigurationsdateien usw.
quelle
Sie müssen es aus dem Ressourcenstrom laden.
Wenn Sie alle Ressourcennamen in Ihrer Assembly kennen möchten, gehen Sie wie folgt vor:
quelle
typeof(this).Assembly
kurz verwenden.typeof(this)
wird nicht funktionieren.this.GetType().Assembly
ist dem, was Sie gesagt haben, am nächsten, aber es ist riskant, weil es eine geerbte Superklasse aufgreift, die sich möglicherweise in einer anderen Baugruppe befindet.typeof(this);
kompiliert nicht. Du erhältstError 1 Type expected
Viel einfacher als die meisten vorgeschlagenen Antworten
quelle
Bitmap
Objekt, keinImage
Objekt.Code, den ich in mehreren meiner Projekte verwende ... Es wird davon ausgegangen, dass Sie Bilder nur als Bitmaps und nicht als Symbole in der Ressource speichern
quelle
Am besten fügen Sie sie als Bildressourcen in den Ressourceneinstellungen des Projekts hinzu. Dann können Sie das Bild direkt abrufen, indem Sie Resources.myimage ausführen. Dadurch wird das Bild über eine generierte C # -Eigenschaft abgerufen.
Wenn Sie das Bild nur als eingebettete Ressource festlegen, erhalten Sie es mit:
Wobei MyTypeFromSameAssemblyAsResource ein beliebiger Typ ist, den Sie in Ihrer Assembly haben.
quelle
Verwenden Sie unter einem. Ich habe dies mit der Grid-Ansichtszelle von Windows Form getestet.
Den Namen "Resource_Image" finden Sie im Projekt.
Unter dem Namen des Projekts finden Sie
Properties
. Es ausweiten. Dort können SieResources.resx
Datei sehen. Öffne es. Wenden Sie Ihren Dateinamen als "Resource_Image" an.quelle
Mit und ImageBox mit dem Namen "ImagePreview FormStrings.MyImageNames" enthält eine reguläre Methode zum Abrufen / Festlegen von Zeichenfolgen, die mit einer Liste von Bildlauffeldtypen verknüpft sind. Die Bilder haben dieselben Namen wie die verknüpften Namen in der Liste, mit Ausnahme der .bmp-Endungen. Alle Bitmaps werden in die Datei resources.resx gezogen
quelle
In meinem Fall - Ich habe Symbole in meiner Ressource verwendet, musste sie jedoch dynamisch als Bilder zu einigen hinzufügen
ToolStripMenuItem
. Bei der von mir erstellten Methode (von der das folgende Codefragment stammt) musste ich die Symbolressourcen in Bitmaps konvertieren, bevor ich sie zur Ergänzung zu meiner zurückgeben konnteMenuItem
.Beachten Sie Folgendes: Wenn Ihr Bild / Symbol beim Hinzufügen zu Ihrer Ressource Leerzeichen ("") enthält, ersetzt VS diese Leerzeichen automatisch durch "_" (s). Weil Leerzeichen beim Benennen Ihrer Ressource kein gültiges Zeichen sind. Aus diesem Grund verwende ich die
Replace()
Methode in meinem Code, auf den verwiesen wird. Sie können diese Zeile wahrscheinlich einfach ignorieren.quelle
Ich schlage vor:
Von msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Die Verwendung von Image.FromStream ist besser, da Sie das Format des Bildes (bmp, png, ...) nicht kennen müssen.
quelle
Die Antwort von JDS funktionierte am besten. C # Beispiel zum Laden eines Bildes:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Beachten Sie Folgendes:
Die Beispielcodezeile wird erfolgreich mit VisualStudio 2015 Community ausgeführt.
quelle
Sie können den BMP auch in einer Variablen wie der folgenden speichern:
ich hoffe es hilft!
quelle
Seltsamerweise finde ich beim Stöbern im Designer einen viel einfacheren Ansatz:
Das Bild scheint unter .Properties.Resources verfügbar zu sein.
Ich verwende einfach ein Bild, da ich es nur in ein Steuerelement mit einem Bild einfügen möchte.
(Net 4.0, VS2010.)
quelle
Ich habe mir den Designer-Code aus einem meiner Projekte angesehen und festgestellt, dass er diese Notation verwendet
Dabei ist max der Name der Ressource, die ich in das Projekt hochgeladen habe.
quelle
Oder Sie können diese Zeile verwenden, wenn Sie mit WPF oder Silverlight arbeiten, insbesondere wenn Sie die Quellzeichenfolge bereits im XAML-Markup haben:
Wo der ImagePath so etwas wie:
quelle
quelle