2011-03-19 18 views
7

मैं इस तरह के बिटमैप को सफलतापूर्वक लोड कर सकता हूं और इसे दृश्य पर छवि नियंत्रण में प्रदर्शित कर सकता हूं।सिल्वरलाइट: बिटमैप इमेज टू लेटेबलबिटमैप

var bitmapImage = new BitmapImage 
          { 
           UriSource = 
            new Uri("../Images/Test.JPG", UriKind.Relative) 
          }; 

हालांकि जैसे ही मैं बिटमैप के बाहर एक WriteableBitmap बनाने के लिए इस लाइन,

var w = new WriteableBitmap(bitmapImage); 

मैं ऊपर लाइन पर एक रनटाइम त्रुटि मिलती है जोड़ने के रूप में: "ऑब्जेक्ट संदर्भ का एक उदाहरण के लिए सेट नहीं एक वस्तु।"

ऐसा लगता है कि बिटमैप छवि निर्माण में देरी हो रही है, क्या वह हो सकता है? मुझे इसे कैसे ठीक करना चाहिए?

अद्यतन:

मैं अब इस कोशिश कर रहा हूँ लेकिन openImage मारा जा कभी नहीं लगता है। (यहां तक ​​कि इसे तुल्यकालिक बनाने की कोशिश किए बिना, यह अभी भी विफल रहता है) यहां क्या गलत है?

var image = new BitmapImage(); 
     image.ImageOpened += (sender, args) => resetEventBitmap.Set(); 
     image.ImageFailed += (o, eventArgs) => 
           { 
            resetEventBitmap.Set(); 
            throw eventArgs.ErrorException; 
           }; 
     image.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 
     image.UriSource = uri; 

     resetEventBitmap.WaitOne(); 

धन्यवाद,

उत्तर

3
BitmapImage _classField; 

    void LoadImageFunction() 
    { 
     _classField = new BitmapImage(); 
     _classField.ImageOpened += new EventHandler<RoutedEventArgs>(bi_ImageOpened); 
     _classField.ImageFailed += new EventHandler<ExceptionRoutedEventArgs>(bi_ImageFailed); 
     //sorry.. totally forgot about order :) 
     _classField.UriSource = new Uri("../some/uri", UriKind.Relative); 
    } 

    void bi_ImageFailed(object sender, ExceptionRoutedEventArgs e) 
    { 
     //something has happend 
     throw e.ErrorException; 
    } 

    void bi_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     //image is loaded.. now we can work with it.. 
     var w = new WriteableBitmap(_classField); 
    } 
+0

अहह्ह्ह इसके असीमित। :) मदद के लिए बहुत बहुत धन्यवाद! – Houman

+0

हाय Ai_boy, दुर्भाग्य से ImageOpened विधि कभी हिट नहीं होती है। मैं यूआरआई सेट होने से पहले सब्सक्राइब होने की घटना को फिर से जोड़ता हूं। लेकिन यह भी काम नहीं कर रहा है। क्या आपको कोई विचार है क्यों? क्या यह आपके लिए काम करता है? कृपया मुख्य पोस्ट में अपना अपडेट देखें। – Houman

+0

ने एक उत्तर संपादित किया .. –

6

संदर्भ: http://www.blog.ingenuitynow.net/Silverlight+Creating+A+WriteableBitmap+From+A+Uri+Source.aspx

असल में, बिटमैप छवि "CreateOptions" जो डिफ़ॉल्ट रूप से, "DelayCreation" पर सेट है निर्भरता संपत्ति है। इससे बिटमैप को इसकी आवश्यकता होने तक प्रतिपादन के लिए देरी हो सकती है। इसलिए, यह हमारे "वस्तु संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं होता" त्रुटि का कारण बनता है। इसे ठीक करने के लिए, हम, WriteableBitmap निर्माता से बाहर बिटमैप निर्माण तोड़ने के लिए इस विकल्प को बदलने के लिए, और उसके बाद में उसे वापस करने के लिए है vb.net में इस तरह दिखता है:।

Dim tmpUri As New Uri(yourpath.ToString) 
    Dim bmp As New BitmapImage 
    bmp.CreateOptions = BitmapCreateOptions.None 
    bmp.UriSource = tmpUri 
    Dim wb As New WriteableBitmap(bmp) 
1
img1 = new BitmapImage(new Uri("/PrjName;component/Images/image01.jpg", UriKind.RelativeOrAbsolute)); 
     img2 = new BitmapImage(new Uri("/PrjName;component/Images/image02.jpg", UriKind.RelativeOrAbsolute)); 
     img1.CreateOptions = BitmapCreateOptions.None; 
     img2.CreateOptions = BitmapCreateOptions.None; 
     img1.ImageOpened += new EventHandler<RoutedEventArgs>(img1_ImageOpened); 
     img2.ImageOpened += new EventHandler<RoutedEventArgs>(img2_ImageOpened); 


    void img2_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     load2 = true; 
    } 

    void img1_ImageOpened(object sender, RoutedEventArgs e) 
    { 
     load1 = true; 
    } 

    private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     while (!load1 && !load2) 
     { } 
     WriteableBitmap x = new WriteableBitmap(img1); 
     WriteableBitmap y = new WriteableBitmap(img2); 
    } 

यह काम करना चाहिए। यह मेरे लिए किया ..! यह इसे एक lil 'जटिल बनाता है, लेकिन इस तरह यह काम करता है!

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