2009-05-13 19 views
34

मेरी असेंबली में BuildAction == संसाधन के साथ एक छवि शामिल है। मैं इस एम्बेडेड संसाधन से बिटमैप इमेज प्राप्त करना चाहता हूं।मैं संसाधन से बिटमैप छवि कैसे प्राप्त कर सकता हूं?

मैं इस तरह फ़ाइल से एक BitmapImage लोड कर सकते हैं:

var bitmap = new BitmapImage(new Uri(path)); 

लेकिन मैं एक उरी कि एक एम्बेडेड संसाधन छवि के पास भेजेगा कैसे बनाने के लिए?

जब मैं कोशिश करते हैं और बनाने के लिए एक 'pack URI', एक अपवाद फेंक दिया जाता है (उदाहरण के pack://application:,,,/MyImage.png या pack://application:,,,/MyAssembly;component/MyImage.png के लिए):

System.UriFormatException "अवैध यूआरआई: एक बंदरगाह की उम्मीद थी एक कॉलन है की वजह से वहाँ (':') मौजूद है लेकिन बंदरगाह को पार्स नहीं किया जा सका। "

मैं ठीक, UriFormatException को यह blog post

हालांकि में, उस के साथ लागू किया समस्याओं का समाधान कर पाया मैं अभी भी एक पैकेट URI से एक BitmapImage लोड करने का प्रयास अपवाद मिलता है।

pack://application:,,,/Image.png प्रारूप का उपयोग करते समय, मुझे एक NullReferenceException मिलता है, और pack://application:,,,/AssemblyName;component/Image.png प्रारूप का उपयोग करते समय, मुझे एक NotSupportedException मिलता है "Uri उपसर्ग पहचान नहीं है"।


सारांश मेरे समस्या यह है कि मैं का उपयोग करने के लिए एक एक प्रक्रिया में 'पैक URI' से पहले किसी भी WPF नियंत्रण/खिड़की/आदि instantiated किया गया था कोशिश कर रहा था, इसलिए 'पैक' URI योजना अभी तक नहीं था पंजीकृत (अन्य WPF आवश्यक 'सामान' भी सेट नहीं किया जाना चाहिए, क्योंकि मैन्युअल रूप से पैक योजना को पंजीकृत करने से समस्या ठीक नहीं होती है)। पैक यूआरआई का उपयोग करने के लिए मेरे डब्ल्यूपीएफ उपयोगकर्ता नियंत्रण को तुरंत चालू करने के बाद तक समाधान का इंतजार करना था।

+1

समस्या के आपके सारांश के लिए धन्यवाद। मुझे एक ही समस्या है और आप सुझाव देने की कोशिश करेंगे। – Oskar

+0

संभावित डुप्लिकेट [कोड में बिटमैप इमेज लोड हो रहा है] (http://stackoverflow.com/questions/801833/loading-bitmapimage-in-code) –

उत्तर

20

This MSDN page में ऐसी सभी जानकारी है जो आप WPF (संसाधन पैक यूआरआई कहा जाता है) में संसाधन यूआरआई के बारे में जानना चाहते हैं। आप सापेक्ष यूआरआई का उपयोग अक्सर अधिक करना चाहते हैं, इसलिए तालिका 4 देखें, जो विशेष उपयोग का होना चाहिए।

यदि आप संसाधन (पैक) यूआरआई का एक संक्षिप्त विवरण चाहते हैं, तो this blog post देखें। यह दर्शाता है कि वाक्य रचना वास्तव में अपेक्षाकृत सरल है:

pack://application:,,,/ResourceFile.xaml 

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml 

हालांकि, वहाँ बाहर काम करने के (मेरे अनुभव में) कुछ quirks हैं, इसलिए अक्सर सही संसाधन यूआरआई प्रयोग का एक बिट की आवश्यकता है ढूँढने।

+1

@ मैकनेर: क्या आपने कभी सोचा था कि आपने जो यूआरएल आपके * संपादित * प्रश्न में पोस्ट किया है जब तक मैंने अपनी प्रतिक्रिया लिखी थी तब तक अभी तक प्रकट नहीं हुआ था। अशिष्टता आपको एक अच्छा जवाब नहीं देगी। – Noldorin

+1

क्षमा करें! मैं भूल गया कि मैं सवाल संपादित करूँगा, विश्वास करो या नहीं। – mackenir

+1

@ मैकनेर: उस मामले में कोई चिंता नहीं। क्या आपने एमएसडीएन पेज पर तालिका 4 में दिखाए गए रिश्तेदार यूआरआई, एए का उपयोग करने की कोशिश की है? आप के साथ और अधिक भाग्य हो सकता है ... – Noldorin

संबंधित मुद्दे