Apakah Anda menggunakan Formulir Windows? Jika Anda telah menambahkan gambar menggunakan Properties / Resources UI, Anda mendapatkan akses ke gambar dari kode yang dihasilkan, sehingga Anda bisa melakukan ini:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Tidak, itu ditambahkan sebagai file biasa ke folder Resources.
Pavel Bastov
9
Ah baiklah. Dalam hal ini saya pikir @ Hallgrim's mendapatkan jawaban untuk Anda menggunakan sumber daya aliran. Jika Anda adalah menggunakan Windows Forms saya akan mendorong Anda untuk menghapus gambar dan menambahkannya kembali dari UI - jauh lebih mudah seperti itu.
Matt Hamilton
114
Anda bisa mendapatkan referensi ke gambar dengan cara berikut:
Image myImage =Resources.myImage;
Jika Anda ingin membuat salinan gambar, Anda harus melakukan yang berikut:
Bitmap bmp =newBitmap(Resources.myImage);
Jangan lupa untuk membuang bmp saat Anda selesai menggunakannya. Jika Anda tidak tahu nama gambar sumber daya pada waktu kompilasi, Anda dapat menggunakan manajer sumber daya:
Manfaat dari ResourceManager adalah Anda dapat menggunakannya di mana Resources.myImage biasanya berada di luar jangkauan, atau di mana Anda ingin mengakses sumber daya secara dinamis. Selain itu, ini berfungsi untuk suara, file konfigurasi, dll.
Anda seharusnya tidak perlu menggunakan refleksi - ini tampaknya terlalu rumit mengingat metode sederhana yang tersedia.
Charlie Garts
Solusi ini tidak berfungsi di C # / Windows Phone .NETCF --GetManifestResourceNames () hanya mengembalikan satu nama, yaitu modul assembly-DLL. Hanya ada satu sumber daya yang tersedia di manifes - gumpalan aliran modul DLL. Tanpa C ++ dan kode yang tidak aman memungkinkan Anda untuk memanggil panggilan API Win32, terus terang itu adalah rasa sakit kerajaan di pantat untuk bekerja dengan potongan memori ini.
Mark Jones
2
Anda juga dapat menggunakan typeof(this).Assemblysingkatnya.
Sri Harsha Chilakapati
1
@SriHarshaChilakapati typeof(this)tidak akan berfungsi. this.GetType().Assemblyadalah yang paling dekat dengan apa yang Anda katakan, tetapi berisiko karena akan mengambil superclass warisan yang mungkin berada di majelis yang berbeda.
John Gibb
2
@SriHarshaChilakapati typeof(this);tidak dikompilasi. Anda dapatError 1 Type expected
John Gibb
26
Jauh lebih mudah daripada kebanyakan semua jawaban yang diajukan
Tidak dapat mengakses seperti itu jika file tersebut bukan bagian dari manifes sumber daya karena OP dengan jelas menyatakan itu hanya ditambahkan sebagai file.
Goyangan
1
Dia juga menginginkan Bitmapobjek, bukan Imageobjek.
vapcguy
13
Kode yang saya gunakan di beberapa proyek saya ... Ini mengasumsikan bahwa Anda menyimpan gambar di sumber daya hanya sebagai bitmap bukan ikon
Yang terbaik adalah menambahkan mereka sebagai Sumber Daya Gambar dalam pengaturan Sumber Daya di Proyek. Maka Anda bisa mendapatkan gambar secara langsung dengan melakukan Resources.myimage. Ini akan mendapatkan gambar melalui properti C # yang dihasilkan.
Jika Anda hanya mengatur gambar sebagai Sumber Daya Tertanam Anda bisa mendapatkannya dengan:
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));
Di mana MyTypeFromSameAssemblyAsResource adalah jenis apa pun yang Anda miliki di perakitan Anda.
Nama "Resource_Image", Anda dapat menemukan dari proyek.
Di bawah nama proyek, Anda dapat menemukannya Properties. Perluas itu. Di sana Anda dapat melihat Resources.resxfile. Buka. Terapkan nama file Anda sebagai "Resource_Image".
Dengan dan ImageBox bernama "ImagePreview FormStrings.MyImageNames berisi metode string get / set reguler, yang ditautkan ke daftar jenis kotak gulir. Gambar memiliki nama yang sama dengan nama yang ditautkan dalam daftar, kecuali untuk akhiran .bmp. Semua bitmap diseret ke resources.resx
Dalam kasus saya - saya menggunakan Ikon di sumber saya, tetapi saya perlu menambahkannya secara dinamis sebagai Gambar ke beberapa ToolStripMenuItem(s). Jadi dalam metode yang saya buat (dari sinilah cuplikan kode di bawah ini berasal), saya harus mengonversi sumber daya ikon menjadi bitmap sebelum saya bisa mengembalikannya sebagai tambahan untuk saya MenuItem.
Hal lain yang perlu diperhatikan, jika gambar / ikon Anda memiliki spasi ("") di namanya saat Anda menambahkannya ke sumber daya Anda, VS akan secara otomatis mengganti spasi tersebut dengan "_". Karena, spasi bukan karakter yang valid saat memberi nama sumber daya Anda. Itulah sebabnya saya menggunakan Replace()metode dalam kode referensi saya. Anda mungkin bisa mengabaikannya saja.
Jawaban:
Apakah Anda menggunakan Formulir Windows? Jika Anda telah menambahkan gambar menggunakan Properties / Resources UI, Anda mendapatkan akses ke gambar dari kode yang dihasilkan, sehingga Anda bisa melakukan ini:
sumber
Anda bisa mendapatkan referensi ke gambar dengan cara berikut:
Jika Anda ingin membuat salinan gambar, Anda harus melakukan yang berikut:
Jangan lupa untuk membuang bmp saat Anda selesai menggunakannya. Jika Anda tidak tahu nama gambar sumber daya pada waktu kompilasi, Anda dapat menggunakan manajer sumber daya:
Manfaat dari ResourceManager adalah Anda dapat menggunakannya di mana Resources.myImage biasanya berada di luar jangkauan, atau di mana Anda ingin mengakses sumber daya secara dinamis. Selain itu, ini berfungsi untuk suara, file konfigurasi, dll.
sumber
Anda perlu memuatnya dari aliran sumber daya.
Jika Anda ingin mengetahui semua nama sumber daya di majelis Anda, ikuti dengan:
sumber
typeof(this).Assembly
singkatnya.typeof(this)
tidak akan berfungsi.this.GetType().Assembly
adalah yang paling dekat dengan apa yang Anda katakan, tetapi berisiko karena akan mengambil superclass warisan yang mungkin berada di majelis yang berbeda.typeof(this);
tidak dikompilasi. Anda dapatError 1 Type expected
Jauh lebih mudah daripada kebanyakan semua jawaban yang diajukan
sumber
Bitmap
objek, bukanImage
objek.Kode yang saya gunakan di beberapa proyek saya ... Ini mengasumsikan bahwa Anda menyimpan gambar di sumber daya hanya sebagai bitmap bukan ikon
sumber
Yang terbaik adalah menambahkan mereka sebagai Sumber Daya Gambar dalam pengaturan Sumber Daya di Proyek. Maka Anda bisa mendapatkan gambar secara langsung dengan melakukan Resources.myimage. Ini akan mendapatkan gambar melalui properti C # yang dihasilkan.
Jika Anda hanya mengatur gambar sebagai Sumber Daya Tertanam Anda bisa mendapatkannya dengan:
Di mana MyTypeFromSameAssemblyAsResource adalah jenis apa pun yang Anda miliki di perakitan Anda.
sumber
Gunakan di bawah ini. Saya telah menguji ini dengan sel tampilan Grid formulir Windows.
Nama "Resource_Image", Anda dapat menemukan dari proyek.
Di bawah nama proyek, Anda dapat menemukannya
Properties
. Perluas itu. Di sana Anda dapat melihatResources.resx
file. Buka. Terapkan nama file Anda sebagai "Resource_Image".sumber
Dengan dan ImageBox bernama "ImagePreview FormStrings.MyImageNames berisi metode string get / set reguler, yang ditautkan ke daftar jenis kotak gulir. Gambar memiliki nama yang sama dengan nama yang ditautkan dalam daftar, kecuali untuk akhiran .bmp. Semua bitmap diseret ke resources.resx
sumber
Dalam kasus saya - saya menggunakan Ikon di sumber saya, tetapi saya perlu menambahkannya secara dinamis sebagai Gambar ke beberapa
ToolStripMenuItem
(s). Jadi dalam metode yang saya buat (dari sinilah cuplikan kode di bawah ini berasal), saya harus mengonversi sumber daya ikon menjadi bitmap sebelum saya bisa mengembalikannya sebagai tambahan untuk sayaMenuItem
.Hal lain yang perlu diperhatikan, jika gambar / ikon Anda memiliki spasi ("") di namanya saat Anda menambahkannya ke sumber daya Anda, VS akan secara otomatis mengganti spasi tersebut dengan "_". Karena, spasi bukan karakter yang valid saat memberi nama sumber daya Anda. Itulah sebabnya saya menggunakan
Replace()
metode dalam kode referensi saya. Anda mungkin bisa mengabaikannya saja.sumber
Saya menyarankan:
Dari msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Menggunakan Image.FromStream lebih baik karena Anda tidak perlu tahu format gambar (bmp, png, ...).
sumber
Jawaban JDS bekerja paling baik. C # contoh memuat gambar:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Perhatikan hal-hal berikut:
Baris kode contoh dijalankan dengan sukses menggunakan Komunitas VisualStudio 2015.
sumber
Anda juga dapat menyimpan bmp dalam var seperti ini:
semoga membantu!
sumber
Anehnya, dari mencari-cari di desainer saya menemukan apa yang tampaknya menjadi pendekatan yang lebih sederhana:
Gambar tampaknya tersedia dari .Properties.Resources.
Saya hanya menggunakan gambar karena semua yang saya tertarik adalah menempelkannya ke kontrol dengan gambar di atasnya.
(Net 4.0, VS2010.)
sumber
Saya melihat kode perancang dari salah satu proyek saya dan memperhatikannya menggunakan notasi ini
di mana max adalah nama sumber daya yang saya unggah ke dalam proyek.
sumber
Atau Anda bisa menggunakan baris ini ketika berhadapan dengan WPF atau Silverlight, terutama di mana Anda sudah memiliki string sumber di markup XAML:
Di mana ImagePath adalah sesuatu seperti:
sumber
sumber