On 08/07/2010 12:28, Jan-Philip Gehrcke wrote:
Thanks for your comment, Michael.
I found the explanation in the docs: http://msdn.microsoft.com/en-us/library/ms619201(v=VS.95).aspx
The default setting is `BitmapCreateOptions.DelayCreation`
-> "Causes a BitmapSource object to delay initialization until it is necessary. This is useful when dealing with collections of images. This is the default value of the BitmapImage.CreateOptions property in Silverlight."

Now, I change this to `BitmapCreateOptions.None` and add the callbacks before assigning the URI:


Great - glad you got it sorted.

Michael

def load_and_show(self):
self.bi = BitmapImage()
self.bi.CreateOptions = BitmapCreateOptions.None;
self.bi.ImageOpened += self.successfully_loaded_now_show
self.bi.ImageFailed += self.load_failed
self.bi.UriSource = Uri(self.abspath, UriKind.Absolute)

def successfully_loaded_now_show(self, s, e):
self.xaml_main_image.Source = self.bi

This works as expected.

Jan-Philip

On 07.07.2010 18:49, Michael Foord wrote:
On 06/07/2010 15:59, Jan-Philip Gehrcke wrote:
Hello,

I don't know if this is more an IronPython (2.6.1) issue than a Silverlight (4) issue, but I hope that I am talking to the right audience again (thank you for the great answers last time).

I've created an `Image` class managing images based on System.Windows.Media.Imaging.BitmapImage. My method `image_instance.load_and_show()` should load the image from a given URI and then show it in an XAML <image /> element. The important thing is that the showing part should only happen after it is sure that the image has loaded correctly. To control this, I use the BitmapImage.ImageOpened event. This is the relevant part of the code from my `Image` class:


def load_and_show(self):
self.bi = BitmapImage(Uri(self.abspath, UriKind.Absolute))
self.bi.ImageOpened += self.successfully_loaded_now_show
self.bi.ImageFailed += self.load_failed
#self.xaml_main_image.Source = self.bi # LINE A

def successfully_loaded_now_show(self, s, e):
debug("image loaded: %s" % s.UriSource) # LINE B
self.xaml_main_image.Source = self.bi # LINE C

def load_failed(self, s, e):
debug("image load failed") # LINE D


If the code is like shown above and I do `image_instance.show_and_load()`, nothing happens. More exactly, LINE B, C, and D are not reached. It is like *neither the event ImageOpened nor ImageFailed is toggled*.


It seems likely then that the image is not opened or downloaded until you set it as the source on an image. Does the code behave differently if you write it in C#?

If you set the bitmapimage as the image source does the event then fire correctly? If so perhaps create the image control but only add it to the visual tree once the bitmap has loaded.

Michael

If I re-activate (or un-outcomment =)) LINE A, the callbacks magically work properly, i.e. after calling `image_instance.show_and_load()` the image shows up in the UI (either via LINE A or C), and LINE B is definitely reached (or LINE D in case of a wrong URI).

The point is that I don't want LINE A, because showing the image should happen in a more controlled manner. What's the problem in my approach, why are the callbacks not called?

Thank you in advance,

Jan-Philip Gehrcke
--
http://gehrcke.de
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com



_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog

READ CAREFULLY. By accepting and reading this email you agree, on behalf of 
your employer, to release me from all obligations and waivers arising from any 
and all NON-NEGOTIATED agreements, licenses, terms-of-service, shrinkwrap, 
clickwrap, browsewrap, confidentiality, non-disclosure, non-compete and 
acceptable use policies (”BOGUS AGREEMENTS”) that I have entered into with your 
employer, its partners, licensors, agents and assigns, in perpetuity, without 
prejudice to my ongoing rights and privileges. You further represent that you 
have the authority to release me from any BOGUS AGREEMENTS on behalf of your 
employer.


_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to