On Wed, Apr 10, 2013 at 10:22 PM, Gustavo Rubio <[email protected]> wrote: > Doug, > > You might want to check the GDK namespace (GIMP Drawing Kit) and not GTK > itself, there is the concept of Pixbuf in GDK (which would be the equivalent > of GDI+ for Windows) that allows you to work on images. > > There is a PixbufAnimationIter > (http://docs.go-mono.com/?link=T%3aGdk.PixbufAnimationIter) class that might > come handy, as I understand you'd have to create a new Gdk.PixbufAnimation > object and then get the Iter by inviking a method and then get the frames: > > var animation = new Gdk.PixbufAnimation("path_to.gif"); > var iter = animation.GetIter(start_time); > var pixbuf = iter.Pixbuf; //assign the frame > iter.Advance(time); //advance to next frame > var pixbuf2 = iter.Pixbuf; //here you'll get the second frame > > I haven't tried yet this, but I'm pretty sure this is what you are after. > Let me know if it worked.
No, that is where I started (see last example below). That requires that you step through the animations "in time". You can march through the frames in a manner by making the Advance() time match the DelayTime. But you won't know when you are looping. Thanks anyway, -Doug > > On Wed, Apr 10, 2013 at 6:58 PM, Doug Blank <[email protected]> wrote: >> >> I couldn't figure out how to access the data through Gtk#, so I got >> the data through System.Drawing: >> >> public static List loadPictures (string filename) >> { >> List list = new List(); >> System.Drawing.Bitmap image = >> (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(filename); >> System.Drawing.Imaging.FrameDimension dimension = new >> >> System.Drawing.Imaging.FrameDimension(image.FrameDimensionsList[0]); >> int frame_count = image.GetFrameCount(dimension); >> for (int i=0; i < frame_count; i++) { >> image.SelectActiveFrame(dimension, i); >> list.append( new Graphics.Picture(image)); >> } >> return list; >> } >> >> -Doug >> >> On Wed, Apr 10, 2013 at 1:41 PM, Doug Blank <[email protected]> wrote: >> > Gtk-sharp List, >> > >> > I can use the Gtk# interface to get the frames of a gif animation >> > based on time, like the following IronPython code shows: >> > >> > image = Gtk.Image(filename) >> > if image.Animation: >> > if not image.Animation.IsStaticImage: >> > iter = image.Animation.GetIter(System.IntPtr.Zero) >> > while iter.DelayTime > -1: >> > pixbuf = iter.Pixbuf >> > ## do something with pixbuf >> > iter.Advance(System.IntPtr.Zero) ## advance to current time >> > >> > But, can I actually get the actual individual *frames* from the gif >> > file? That is, I can use this interface to step through time getting >> > the appropriate image for the specified time, but if an animated gif >> > has 7 gifs in it, is there a direct way to just get the 7 pixbufs? >> > >> > Thanks for any pointers, >> > >> > -Doug >> _______________________________________________ >> Gtk-sharp-list maillist - [email protected] >> http://lists.ximian.com/mailman/listinfo/gtk-sharp-list > > > > > -- > Gustavo Rubio > MX: (664) 608-0659 > US: (619) 502-9192 > http://42ideas.mx _______________________________________________ Gtk-sharp-list maillist - [email protected] http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
