2013-06-19 7 views
14

मैं समझता हूं कि इस प्रश्न से पहले पूछा गया है (और उत्तर दिया गया है)। हालांकि, मेरे लिए कोई भी समाधान काम नहीं कर रहा है। यह मेरी अक्षमता, वूडू श्राप या कुछ सरल और स्पष्ट है कि मैं याद कर रहा हूं।पथ फ़ाइल के साथ संसाधन फ़ाइल से चित्र बॉक्स छवि लोड हो रहा है (भाग 3)

नीचे पहेली के सभी प्रासंगिक टुकड़े का एक स्क्रीन पर कब्जा है:

Screen capture http://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

आप चित्र फ़ोल्डर में संसाधनों के रूप में भरी हुई पौधों की कई BMPs देखते हैं देख सकते हैं। "प्लांटचित्र" नामक एक चित्र बॉक्स वाला एक रूप है।

  PicPath = PicPath+".bmp"; 

Screen capture http://dinosaur-island.com/PlantDebugger.jpg

मैं लोडिंग के कई तरीके की कोशिश की है, कास्टिंग, आदि, आदि: वहाँ स्ट्रिंग है, जो मैं जानता हूँ कि एक अच्छा मार्ग है (क्योंकि मैं डीबगर में यह देख लिया है) है

यदि आप दयालुता लेंगे और इसे एक और शॉट देंगे तो मैं किसी भी सलाह की सराहना करता हूं। धन्यवाद!

उत्तर

28

पथ कुछ ऐसा होना चाहिए: "Images\a.bmp"। (एक अग्रणी स्लैश की कमी नोट, और स्लैश वापस स्लैश किया जा रहा है।)

और फिर:

pictureBox1.Image = Image.FromFile(@"Images\a.bmp"); 

मैं सिर्फ यह सुनिश्चित करने के लिए करने की कोशिश की, और यह काम करता है। यह आपके द्वारा प्राप्त अन्य उत्तर के अलावा - "हमेशा कॉपी" करने के लिए है।

+0

वापस स्लैश प्राप्त करने के लिए बहुत से लोगों के माध्यम से चला गया। PicPath = "@Images \ None.bmp" (यह 'कोई नहीं' छवि के लिए एक सही पथ है) ... त्रुटि को फेंकता है: "प्रकार का एक अनचाहे अपवाद 'सिस्टम IO.FileNotFoundException 'System.Drawing.dll में हुआ। अतिरिक्त जानकारी @Images \ None.bmp ... डबल-चेक किया गया। None.bmp डिस्क पर' संसाधन 'और फ़ोल्डर दोनों में मौजूद है' छवियाँ ' – zetar

+1

@zetar "@ छवियाँ \ None.bmp "गलत है। @" छवियाँ \ None.bmp "सही है। @ बस" # "के बाद" एन "से बचने के लिए सी # को _not_ से बचता है और" \ "को केवल बैकस्लैश के रूप में मानता है। आप इसे भी कर सकते हैं: "\\" (एक डबल बैकस्लैश।) – ispiro

+0

समझ गया! उस स्ट्रिंग में @ को हटा दिया गया था जिसमें पारित किया जा रहा था! – zetar

2

"आउटपुट निर्देशिका में कॉपी करें" को "हमेशा कॉपी करें" या "नई अगर कॉपी करें" को आपके लिए मदद कर सकता है।

आपका PicPath एक सापेक्ष पथ है जो छवि लोड करते समय कुछ समय पर एक पूर्ण पथ में परिवर्तित हो जाता है। शायद आप देखेंगे कि निर्दिष्ट स्थान पर कोई छवियां नहीं हैं यदि आप डीबग में Path.GetFullPath(PicPath) का उपयोग करते हैं।

+0

मैं Path.GetFullPath से हमेशा कॉपी 'में बदल दिया ... निर्गम (PicPath) है "सी: \\ छवियाँ \\ none.bmp" - बिल्कुल नहीं, मैं क्या चाहता था। लेकिन, मैं वास्तव में नहीं चाहता कि तस्वीर हार्ड ड्राइव से लोड हो। क्या ये छवियां उपलब्ध नहीं हैं (जिसे हम साल पहले कॉल करते थे) 'प्रीकंपिल्ड इनलाइन इमेज'? – zetar

+0

हां। खेद है कि अग्रणी/aspiro के रूप में अग्रणी पर्यवेक्षण किया है। – wonko79

9

ठीक है ... इसलिए पहले आप छवि

1) पर्चा डिजाइन

2) ओपन PictureBox कार्य (यह छोटा तीर पर सही करने के लिए pinted है में picturebox का चयन अपनी परियोजना में आयात करने की आवश्यकता picturebox पर बढ़त)

3) पर क्लिक करें "छवि चुनें ..."

4) दूसरा विकल्प "परियोजना संसाधन फ़ाइल:" का चयन करें (एक फ़ोल्डर "संसाधन" कहा जाता है पैदा करेगा इस विकल्प जो आप कर सकते हैं गुणों के साथ acces.Resources)

5) आयात पर क्लिक करें और अपने कंप्यूटर से अपने छवि का चयन (अब एक ही नाम के साथ छवि की प्रति छवि संसाधन फ़ोल्डर चरण 4 में बनाया)

6) ठीक पर क्लिक करें में भेजा जाएगा के रूप में

अब छवि आपके प्रोजेक्ट में है और आप इसे प्रॉपर्टी कमांड के साथ उपयोग कर सकते हैं।

pictureBox1.Image = Properties.Resources.myimage; 

नोट:: अपने आयातित छवि फ़ाइल myimage छवि का नाम प्रतिनिधित्व करते हैं ... संसाधन के बाद डॉट टाइप करने के बाद, अपने विकल्पों में यह हो जाएगा जब आप picturebox से तस्वीर बदलना चाहते बस इस कोड लिखें

1

स्वीकृत उत्तर में बड़ी कमी है!
यदि आपने अपनी छवि को लोड किया है तो आपका पिक्चरबॉक्स छवि लॉक करेगा, इसलिए यदि आप उस छवि पर भविष्य के किसी भी ऑपरेशन करने का प्रयास करते हैं, तो आपको त्रुटि संदेश छवि किसी अन्य एप्लिकेशन में उपयोग की जाएगी!
यह article show solution in VB

और यह सी # कार्यान्वयन

FileStream fs = new System.IO.FileStream(@"Images\a.bmp", FileMode.Open, FileAccess.Read); 
    pictureBox1.Image = Image.FromStream(fs); 
    fs.Close(); 
6

यह अपने फ़ाइल पथ पर निर्भर करता है। मेरे लिए, वर्तमान निर्देशिका [project]\bin\Debug थी, इसलिए मुझे दो बार मूल फ़ोल्डर में जाना पड़ा।

Image image = Image.FromFile(@"..\..\Pictures\"+text+".png"); 
this.pictureBox1.Image = image; 

अपने वर्तमान निर्देशिका खोजने के लिए, आप Label2 कहा जाता है एक डमी लेबल बनाने के लिए और यह लिख सकते हैं:

this.label2.Text = System.IO.Directory.GetCurrentDirectory(); 
संबंधित मुद्दे