मेरे पास संसाधन / myimage.jpg पर संग्रहीत मेरी परियोजना में एक छवि है। मैं इस छवि को गतिशील रूप से बिटमैप ऑब्जेक्ट में कैसे लोड कर सकता हूं?
मेरे पास संसाधन / myimage.jpg पर संग्रहीत मेरी परियोजना में एक छवि है। मैं इस छवि को गतिशील रूप से बिटमैप ऑब्जेक्ट में कैसे लोड कर सकता हूं?
जवाबों:
क्या आप विंडोज फॉर्म का उपयोग कर रहे हैं? यदि आपने गुण / संसाधन 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");
रिसोर्स मैनजर का लाभ यह है कि आप इसका उपयोग कर सकते हैं जहाँ 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);
}
सबसे अच्छी बात यह है कि उन्हें प्रोजेक्ट में संसाधन सेटिंग्स में छवि संसाधन के रूप में जोड़ना है। फिर आप संसाधन.उपयोग करके सीधे छवि प्राप्त कर सकते हैं। यह एक उत्पन्न 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 आपके विधानसभा में किसी भी प्रकार का है।
नीचे एक प्रयोग करें। मैंने इसे विंडोज फॉर्म के ग्रिड व्यू सेल के साथ टेस्ट किया है।
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 में एक नियमित रूप से प्राप्त / सेट स्ट्रिंग कास्ट विधि शामिल है, जो एक स्क्रॉलबॉक्स प्रकार की सूची से जुड़ी हुई हैं। छवियों के पास .bmp अंत के अलावा सूची में जुड़े नामों के समान नाम हैं। बिटमैप्स संसाधनों में घसीटा जाता है ।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();
कुछ और के बारे में पता करने के लिए, यदि आपकी छवि / आइकन में अपने नाम में रिक्त स्थान ("") है, जब आप उन्हें अपने संसाधन में जोड़ते हैं, तो वीएस स्वचालित रूप से उन जगहों को "_" (ओं) से बदल देगा। क्योंकि, आपके संसाधन का नामकरण करते समय रिक्त स्थान एक मान्य वर्ण नहीं है। यही कारण है कि मैं 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
Image.FromStream का उपयोग करना बेहतर है क्योंकि आपको छवि का प्रारूप (bmp, png, ...) जानने की आवश्यकता नहीं है।
JDS के जवाब ने सबसे अच्छा काम किया। C # उदाहरण लोड हो रही छवि:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
निम्नलिखित बातों पर ध्यान दें:
उदाहरण कोड लाइन VisualStudio 2015 समुदाय का सफलतापूर्वक उपयोग करके चलाई जाती है।
अजीब तरह से, डिजाइनर में प्रहार से मुझे लगता है कि एक बहुत सरल दृष्टिकोण लगता है:
छवि .Properties.Resources से उपलब्ध होने लगती है।
मैं बस एक छवि का उपयोग कर रहा हूं क्योंकि मुझे इसमें रुचि रखने वाले सभी को इस पर एक छवि के साथ नियंत्रण में चिपकाना है।
(नेट 4.0, वीएस2010।)
मैंने अपने एक प्रोजेक्ट के डिजाइनर कोड को देखा और देखा कि इस नोटेशन का इस्तेमाल किया
myButton.Image = global::MyProjectName.Properties.Resources.max;
जहां अधिकतम उस संसाधन का नाम है जिसे मैंने परियोजना में अपलोड किया है।
WPF या सिल्वरलाइट के साथ काम करते समय या आप इस लाइन का उपयोग कर सकते हैं, खासकर जहां आपके पास स्रोत स्ट्रिंग पहले से ही XAML मार्कअप में है:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
जहां ImagePath कुछ इस तरह है:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";
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);