2009-11-06 12 views
9

शुभ दिन सभी छवि स्रोत के रूप में स्थापित किया गया था,समस्याएं अधिलेखन (फिर से बचत) छवि जब यह

मैं छवि अनुमति के साथ कुछ परेशानी हो रही हूँ।

मैं फ़ाइल से एक छवि लोड कर रहा हूं, इसका आकार बदल रहा हूं और फिर इसे किसी अन्य फ़ोल्डर में सहेज रहा हूं। मैं तो इतना है कि यह प्रदर्शित कर रहा हूँ:

uriSource = new Uri(Combine(imagesDirectoryTemp, generatedFileName), UriKind.Absolute); 

    imgAsset.Source = new BitmapImage(uriSource); 

यह ठीक काम कर रहा है, मुसीबत आता है उपयोगकर्ता तब के बाद एक और छवि का चयन करता है तुरंत और मूल फ़ाइल पर बचाने के लिए कोशिश करता है।

एक अपवाद कुछ खेलने के बाद मेरी छवि "ExternalException: A generic error occurred in GDI+."

बचत के आसपास मैं इस लाइन को दूर करने और नहीं imagesource की स्थापना मुझे इस फाइल में कई बार के ऊपर लिख करने की अनुमति देगा के रूप में imgAsset.Source = new BitmapImage(uriSource); करने के लिए नीचे त्रुटि संकुचित है पर उत्पन्न होता है।

मैंने किसी अन्य चीज़ को स्रोत स्थापित करने का भी प्रयास किया है, उम्मीद है कि पुराने संदर्भ का निपटारा किया जाएगा, यह मामला नहीं था।

मैं इस त्रुटि को कैसे प्राप्त कर सकता हूं?

धन्यवाद, Kohan

संपादित

अब इस कोड का उपयोग मैं अपवाद हालांकि छवि स्रोत को अद्यतन करने नहीं है नहीं मिल रहा है। चूंकि मैं सोर्सस्ट्रीम का उपयोग नहीं कर रहा हूं, इसलिए मुझे यकीन नहीं है कि मुझे यह काम करने के लिए क्या निपटान करने की आवश्यकता है।

 uriSource = new Uri(Combine(imagesDirectoryTemp, generatedFileName), UriKind.Absolute); 

     imgTemp = new BitmapImage(); 
     imgTemp.BeginInit(); 
     imgTemp.CacheOption = BitmapCacheOption.OnLoad; 
     imgTemp.UriSource = uriSource; 
     imgTemp.EndInit(); 

     imgAsset.Source = imgTemp; 

उत्तर

33

आप लगभग वहां हैं।

  • बिटमैप कैशऑप्शन का उपयोग करना। ऑनलोड आपके फ़ाइल को लॉक होने से रोकने का सबसे अच्छा समाधान था।

  • प्रत्येक बार जब आप बिटमैपक्रेटऑप्शन। इग्नोर इमेज कैश जोड़ने की आवश्यकता होती है तो फ़ाइल को फिर से चलाने के लिए इसका कारण बनता है।

अपने कोड में एक लाइन को जोड़ने से यह करना चाहिए:

imgTemp.CreateOption = BitmapCreateOptions.IgnoreImageCache; 

इस प्रकार इस कोड में जिसके परिणामस्वरूप:

uriSource = new Uri(Combine(imagesDirectoryTemp, generatedFileName), UriKind.Absolute); 
    imgTemp = new BitmapImage(); 
    imgTemp.BeginInit(); 
    imgTemp.CacheOption = BitmapCacheOption.OnLoad; 
    imgTemp.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
    imgTemp.UriSource = uriSource; 
    imgTemp.EndInit(); 
    imgAsset.Source = imgTemp; 
+0

बिल्कुल सही, इसके लिए बहुत धन्यवाद। – 4imble

+1

imgTemp.CreateOption imgTemp होना चाहिए। क्रिएटऑप्शन –

0

बहुत ज्यादा समस्या मैं Intuipic विकासशील था, जहां WPF छवि के निपटान नहीं होता की तरह लगता है, इस प्रकार फ़ाइल ताला लगा। this converter देखें, मैंने समस्या से निपटने के लिए लिखा था।

+0

नमस्ते, धन्यवाद है कि के लिए, मैं हूँ नहीं रह गया है एक त्रुटि पैदा लेकिन अद्यतन के बाद छवि स्रोत अद्यतन नहीं हो रहा है। क्या मुझे आपके उदाहरण के अनुसार कुछ निपटाने की ज़रूरत है या क्या मुझे छवियों को किसी भी तरह रीफ्रेश करने की आवश्यकता है? धन्यवाद। – 4imble

1

जब आप किसी भी WPF नियंत्रण में कोई छवि लोड करते हैं तो यह आपकी छवि को संभालने देता है और जब तक आप अपना एप्लिकेशन बंद नहीं करते हैं तब तक इसे रिलीज़ नहीं करते हैं। इस का कारण यह ... वास्तव में जानता हूँ कि मैं न, problably दृश्य है जो कभी नहीं जानता है जब WPF आवेदन विज्ञप्ति छवि .. उपयोग छवि को लोड करने के लिए इस कोड ..

 MemoryStream mstream = new MemoryStream(); 
     System.Drawing.Bitmap bitmap = new Bitmap(imgName); 
     bitmap.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg); 
     bitmap.Dispose(); // Releases the file. 

     mstream.Position = 0; 

     image.BeginInit(); 
     image.StreamSource = mstream; 
     image.EndInit(); 
     this.img.Source = image ; 
के पीछे कुछ DirectX कोड पर प्रसारण किया जाता है

यह मेरे लिए काम किया ..

+0

यह काम करता है लेकिन BitmapCacheOptions.OnLoad और BitmapCreateOptions.IgnoreImageCache का उपयोग करने से बहुत कम कुशल है क्योंकि: 1. यह रैम में डेटा की दो प्रतियां रखता है, 2. यह धीमा है क्योंकि सिस्टम के दौरान बहुत सारे पार्सिंग और प्रसंस्करण होते हैं। ड्रॉइंग .Bitmap.Save कॉल करें। यह काम नहीं करेगा अगर imgName एक यूआरआई है जिसे केवल डब्ल्यूपीएफ द्वारा नियंत्रित किया जाता है। –

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