7 GIF and Animated GIF Writing

▼ |  | Mr Lib: Extra GUI Libraries

1 | Aligned Pasteboard
2 | Arrow Toggle Snip
3 | Bitmap Label
4 | Cache-image Snip
5 | Close Icon
6 | Expandable Snip
7 | GIF and Animated GIF Writing
8 | Graphs
9 | Hierarchical List Control
10 | Include Bitmap
11 | Interactive Value Port
12 | Name Message
13 | Path Dialog
14 | Plot
15 | Switchable Button
16 | Image Core
17 | Matrix Snip
18 | Snip Canvases
19 | Syntax Browser
20 | Te X Table
21 | Terminal Window
22 | Acknowledgments
| Index

On this page:

write-gif
write-animated-gif

top ← prev up next →

### 7`` GIF and Animated GIF Writing

(require mrlib/gif) | package: gui-lib

> procedure (write-gif bitmap filename) → void?
> | bitmap |  | : |  |
> (or/c (is-a?/c bitmap%)
> (-> (is-a?/c bitmap%)))
> filename : path-string?

Writes the given bitmap to filename as a GIF image, where bitmap is either an instance of bitmap% or a thunk (to be called just once) that generates such an object. If the bitmap uses more than 256 colors, it is automatically quantized using a simple algorithm; see quantize. If the bitmap has a mask bitmap via get-loaded-mask, it is used to determine transparent pixels in the generated GIF image.

> > procedure
> > (write-animated-gif |  | bitmaps |
> > |  | delay-csec |
> > |  | filename |
> > | [ | #:loop? loop? |
> > |  | #:one-at-a-time? one-at-a-time? |
> > |  | #:last-frame-delay last-frame-delay |
> > |  | #:disposal disposal]) |
> → void?
> | bitmaps |  | : |  |
> (and/c
> (listof (or/c (is-a?/c bitmap%)
> (-> (is-a?/c bitmap%))))
> pair?)
> delay-csec : (integer-in 0 4294967295)
> filename : path-string?
> loop? : any/c = (and delay-csec #t)
> one-at-a-time? : any/c = #f
> last-frame-delay : (or/c (integer-in 0 4294967295) #f) = #f
> disposal : (or/c 'any 'keep 'restore-bg 'restore-prev) = 'any

Writes the bitmaps in bitmaps to filename as an animated GIF. The bitmaps list can contain a mixture of bitmap% objects and thunks (each called just once) that produce bitmap% objects. The delay-csec argument is the amount of time in 1/100s of a second to wait between transitions. If loop? is a true value, then the GIF is marked as a looping animation.

If one-at-a-time? is #f, then the content of all images is collected and quantized at once, to produce a single colortable; a drawback to this approach is that it uses more memory, and it allows less color variation among animation frames. Even when one-at-a-time? is #f, the result of each thunk in bitmaps is converted to a byte-string one at a time.

If one-at-a-time? is true, then the bitmaps are quantized and written to the file one at a time; that is, for each thunk in bitmaps, its result is written and discarded before another thunk is called. A drawback to this approach is that a separate colortable is written for each frame in the animation, which can make the resulting file large.

If last-frame-delay is not false, a delay of last-frame-delay (in 1/100s of a second) is added to the last frame. This extra delay is useful when loop? is true.

The disposal argument specifies the frame disposal method, which determines how the previous frame is treated when writing a transparent frame. The same disposal method is applied to every frame. See gif-add-control for the meaning of the various disposal options.

top ← prev up next →