Re: GdkPixbufLoader size-prepared troubles



On Wed, 2010-08-11 at 16:13 +0900, Alesh Slovak wrote:

> >> But when I do this, the image data never makes it into the pixbuf, although the
> >> pixbuf itself appears to get sized correctly.
> >
> > Are you trying to get the pixbuf from the loader too soon?
> 
> This appears to be the case. I was getting the pixbuf from the loader in the 
> handler for the area-prepared signal, which worked just fine as long as I didn't 
> call gdk_pixbuf_loader_set_size() in the size-prepared handler.

Quoting from the docs, "area_prepared", will be called as soon as the
pixbuf of the desired has been allocated. You can obtain it by calling
gdk_pixbuf_loader_get_pixbuf(). If you want to use it, simply ref it. In
addition, no actual information will be passed in yet".

>From that I would expect that no image data is written until
area-updated is called. I wouldn't expect a call to
gdk_pixbuf_loader_get_pixbuf() to produce a displayable image in
area-prepared.

> Getting the pixbuf in the area-updated handler fixes this particular problem. So 
> now I can get a scaled image out of the pixbuf loader. I am still receiving 
> multiple size-prepared signals, but it doesn't seem to be having any ill effects 
> as far as I can tell.

I still find it strange that you are seeing multiple size-prepared
signals. I've only ever seen it emitted once and from the docs I would
only expect to see it once.

Are you making multiple calls to gdk_pixbuf_loader_write()? I've never
tried it. but according to the docs...

"This will cause a pixbuf loader to parse the next count bytes of an
image." 

>From that, I wonder if it would be possible to progressively show an
image by making multiple calls to gdk_pixbuf_loader_write() and instead
of passing the full size of image, just pass a specific number of bytes
to parse until the image is fully loaded. Doing this would still allow
using gdk_pixbuf_loader_set_size() to scale the image while it is
loaded. 

> 
> I happened to notice one peculiar thing though, when I call 
> gdk_pixbuf_loader_set_size(), the area-updated signal is only ever called once, 
> after the image has finished loading. Thus, I can't update the display to show 
> the image loading progressively. I guess loading/displaying image data 
> progressively and scaling at the same time are not supported by GdkPixbufLoader?

I've never tried to progressively load the image. Your seeing only one
area-updated signal does make it sound like progressively loading and
scaling the image with gdk_pixbuf_loader_set_size() is not supported.


Regards,
	Jim H



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]