xref: /aosp_15_r20/external/giflib/doc/whatsinagif/animation_and_transparency.html (revision 324bb76b8d05e2a05aa88511fff61cf3f9ca5892)
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html>
3<head>
4<title>What's In A GIF - Animation and Transparency</title>
5<script type="text/javascript"></script>
6<link rel="stylesheet" href="../proj.css" />
7<style type="text/css">
8.byte {font-family: Courier, fixed;
9	padding: .2em}
10.gif_header {background-color: #f9E89D}
11.gif_screen {background-color: #C8DBD9}
12.gif_color {background-color: #E1E1E1}
13.gif_graphic {background-color: #F9EB9D}
14.gif_imgdesc {background-color: #C2D1DC}
15.gif_imgdata {background-color: #D0C4C4}
16.gif_trailer {background-color: #f9E89D}
17.gif_ext {background-color: #D0CFAE}
18#global_color_size {margin-left: auto; margin-right:auto; border:1px solid black;}
19#global_color_size td {text-align:center;}
20</style>
21</head>
22<body>
23<table width='100%' cellpadding='0' summary='Canned page header' bgcolor="#ddd">
24<tr>
25<td><h2>What's In A GIF</h2></td>
26<td align="center"><img src="../giflib-logo.gif"></td>
27<td align="right">(animation and transparency)</td>
28</tr>
29</table>
30
31<div id="body">
32<div style="text-align:center; margin-top: 10px; padding-top: 10px; border-top: #cecece 1px solid">
33<p><a href="index.html">Back to the What's In A GIF index page.</a></p>
34</div>
35
36<p>In addition to being able to store simple image data,
37GIF files (specifically GIF89a files) allow for some special features. Tricks
38such as transparency and animation can be accomplished with the
39help of the Graphics Control Extension block. Here's a sample of what this
40block looks like:</p>
41
42<p style="text-align:center"><img src="graphic_control_ext.gif"
43alt="GIF graphics control ext block layout" style="border: 1px solid
44black" /></p>
45
46<p>I'll show you how to manipulate the bytes in this block to achieve
47special effects.</p>
48
49<h2><a name="animation">Animation</a></h2>
50
51<p>Cartoons are created by animators who draw a sequence of pictures,
52each slightly different from the one before, which, when rapidly shown
53one after the other, give the illusion of motion. Animation in GIF
54images is achieved in much the same way. Multiple images may be stored
55in the same file and you can tell the computer how much time to wait
56before showing the next image. Let's walk though the parts that make
57up this simple traffic light animation.
58</p>
59
60<p style="text-align:center"><img src="sample_2_animation.gif"
61alt="sample animated traffic light" / WIDTH="11" HEIGHT="29"></p>
62<p>
63
64<span class="byte gif_header"> 47 </span>
65<span class="byte gif_header"> 49 </span>
66<span class="byte gif_header"> 46 </span>
67<span class="byte gif_header"> 38 </span>
68<span class="byte gif_header"> 39 </span>
69<span class="byte gif_header"> 61 </span>
70<span class="byte gif_screen"> 0B </span>
71<span class="byte gif_screen"> 00 </span>
72<span class="byte gif_screen"> 1D </span>
73<span class="byte gif_screen"> 00 </span>
74<span class="byte gif_screen"> A2 </span>
75<span class="byte gif_screen"> 05 </span>
76<span class="byte gif_screen"> 00 </span>
77<span class="byte gif_color"> FF </span>
78<span class="byte gif_color"> 00 </span>
79<span class="byte gif_color"> 00 </span>
80<span class="byte gif_color"> 00 </span>
81<span class="byte gif_color"> FF </span>
82<span class="byte gif_color"> 00 </span>
83<span class="byte gif_color"> FF </span>
84<span class="byte gif_color"> FF </span>
85<span class="byte gif_color"> 00 </span>
86<span class="byte gif_color"> 8E </span>
87<span class="byte gif_color"> 8E </span>
88<span class="byte gif_color"> 8E </span>
89<span class="byte gif_color"> 00 </span>
90<span class="byte gif_color"> 00 </span>
91<span class="byte gif_color"> 00 </span>
92<span class="byte gif_color"> FF </span>
93<span class="byte gif_color"> FF </span>
94<span class="byte gif_color"> FF </span>
95<span class="byte gif_color"> 00 </span>
96<span class="byte gif_color"> 00 </span>
97<span class="byte gif_color"> 00 </span>
98<span class="byte gif_color"> 00 </span>
99<span class="byte gif_color"> 00 </span>
100<span class="byte gif_color"> 00 </span>
101<span class="byte gif_ext"> 21 </span>
102<span class="byte gif_ext"> FF </span>
103<span class="byte gif_ext"> 0B </span>
104<span class="byte gif_ext"> 4E </span>
105<span class="byte gif_ext"> 45 </span>
106<span class="byte gif_ext"> 54 </span>
107<span class="byte gif_ext"> 53 </span>
108<span class="byte gif_ext"> 43 </span>
109<span class="byte gif_ext"> 41 </span>
110<span class="byte gif_ext"> 50 </span>
111<span class="byte gif_ext"> 45 </span>
112<span class="byte gif_ext"> 32 </span>
113<span class="byte gif_ext"> 2E </span>
114<span class="byte gif_ext"> 30 </span>
115<span class="byte gif_ext"> 03 </span>
116<span class="byte gif_ext"> 01 </span>
117<span class="byte gif_ext"> 00 </span>
118<span class="byte gif_ext"> 00 </span>
119<span class="byte gif_ext"> 00 </span>
120<span class="byte gif_graphic"> 21 </span>
121<span class="byte gif_graphic"> F9 </span>
122<span class="byte gif_graphic"> 04 </span>
123<span class="byte gif_graphic"> 04 </span>
124<span class="byte gif_graphic"> 64 </span>
125<span class="byte gif_graphic"> 00 </span>
126<span class="byte gif_graphic"> 00 </span>
127<span class="byte gif_graphic"> 00 </span>
128<span class="byte gif_imgdesc"> 2C </span>
129<span class="byte gif_imgdesc"> 00 </span>
130<span class="byte gif_imgdesc"> 00 </span>
131<span class="byte gif_imgdesc"> 00 </span>
132<span class="byte gif_imgdesc"> 00 </span>
133<span class="byte gif_imgdesc"> 0B </span>
134<span class="byte gif_imgdesc"> 00 </span>
135<span class="byte gif_imgdesc"> 1D </span>
136<span class="byte gif_imgdesc"> 00 </span>
137<span class="byte gif_imgdesc"> 00 </span>
138<span class="byte gif_imgdata"> 03 </span>
139<span class="byte gif_imgdata"> 30 </span>
140<span class="byte gif_imgdata"> 48 </span>
141<span class="byte gif_imgdata"> BA </span>
142<span class="byte gif_imgdata"> DC </span>
143<span class="byte gif_imgdata"> DE </span>
144<span class="byte gif_imgdata"> 23 </span>
145<span class="byte gif_imgdata"> BE </span>
146<span class="byte gif_imgdata"> 48 </span>
147<span class="byte gif_imgdata"> 21 </span>
148<span class="byte gif_imgdata"> AD </span>
149<span class="byte gif_imgdata"> EB </span>
150<span class="byte gif_imgdata"> 62 </span>
151<span class="byte gif_imgdata"> A5 </span>
152<span class="byte gif_imgdata"> 25 </span>
153<span class="byte gif_imgdata"> D3 </span>
154<span class="byte gif_imgdata"> 93 </span>
155<span class="byte gif_imgdata"> F7 </span>
156<span class="byte gif_imgdata"> 8C </span>
157<span class="byte gif_imgdata"> E4 </span>
158<span class="byte gif_imgdata"> 27 </span>
159<span class="byte gif_imgdata"> 9A </span>
160<span class="byte gif_imgdata"> 1B </span>
161<span class="byte gif_imgdata"> D7 </span>
162<span class="byte gif_imgdata"> A1 </span>
163<span class="byte gif_imgdata"> 17 </span>
164<span class="byte gif_imgdata"> 9B </span>
165<span class="byte gif_imgdata"> 1E </span>
166<span class="byte gif_imgdata"> A0 </span>
167<span class="byte gif_imgdata"> F3 </span>
168<span class="byte gif_imgdata"> 96 </span>
169<span class="byte gif_imgdata"> 34 </span>
170<span class="byte gif_imgdata"> 13 </span>
171<span class="byte gif_imgdata"> DC </span>
172<span class="byte gif_imgdata"> CF </span>
173<span class="byte gif_imgdata"> AD </span>
174<span class="byte gif_imgdata"> 37 </span>
175<span class="byte gif_imgdata"> 7A </span>
176<span class="byte gif_imgdata"> 6F </span>
177<span class="byte gif_imgdata"> F7 </span>
178<span class="byte gif_imgdata"> B8 </span>
179<span class="byte gif_imgdata"> 05 </span>
180<span class="byte gif_imgdata"> 30 </span>
181<span class="byte gif_imgdata"> 28 </span>
182<span class="byte gif_imgdata"> F4 </span>
183<span class="byte gif_imgdata"> 39 </span>
184<span class="byte gif_imgdata"> 76 </span>
185<span class="byte gif_imgdata"> B5 </span>
186<span class="byte gif_imgdata"> 64 </span>
187<span class="byte gif_imgdata"> 02 </span>
188<span class="byte gif_imgdata"> 00 </span>
189<span class="byte gif_graphic"> 21 </span>
190<span class="byte gif_graphic"> F9 </span>
191<span class="byte gif_graphic"> 04 </span>
192<span class="byte gif_graphic"> 04 </span>
193<span class="byte gif_graphic"> 32 </span>
194<span class="byte gif_graphic"> 00 </span>
195<span class="byte gif_graphic"> 00 </span>
196<span class="byte gif_graphic"> 00 </span>
197<span class="byte gif_imgdesc"> 2C </span>
198<span class="byte gif_imgdesc"> 02 </span>
199<span class="byte gif_imgdesc"> 00 </span>
200<span class="byte gif_imgdesc"> 0B </span>
201<span class="byte gif_imgdesc"> 00 </span>
202<span class="byte gif_imgdesc"> 07 </span>
203<span class="byte gif_imgdesc"> 00 </span>
204<span class="byte gif_imgdesc"> 10 </span>
205<span class="byte gif_imgdesc"> 00 </span>
206<span class="byte gif_imgdesc"> 00 </span>
207<span class="byte gif_imgdata"> 03 </span>
208<span class="byte gif_imgdata"> 19 </span>
209<span class="byte gif_imgdata"> 78 </span>
210<span class="byte gif_imgdata"> 27 </span>
211<span class="byte gif_imgdata"> AC </span>
212<span class="byte gif_imgdata"> CB </span>
213<span class="byte gif_imgdata"> 0D </span>
214<span class="byte gif_imgdata"> CA </span>
215<span class="byte gif_imgdata"> 49 </span>
216<span class="byte gif_imgdata"> E1 </span>
217<span class="byte gif_imgdata"> B3 </span>
218<span class="byte gif_imgdata"> 0A </span>
219<span class="byte gif_imgdata"> BB </span>
220<span class="byte gif_imgdata"> CD </span>
221<span class="byte gif_imgdata"> F7 </span>
222<span class="byte gif_imgdata"> F8 </span>
223<span class="byte gif_imgdata"> CE </span>
224<span class="byte gif_imgdata"> 27 </span>
225<span class="byte gif_imgdata"> 1E </span>
226<span class="byte gif_imgdata"> 62 </span>
227<span class="byte gif_imgdata"> 69 </span>
228<span class="byte gif_imgdata"> 9E </span>
229<span class="byte gif_imgdata"> A3 </span>
230<span class="byte gif_imgdata"> 19 </span>
231<span class="byte gif_imgdata"> 82 </span>
232<span class="byte gif_imgdata"> 47 </span>
233<span class="byte gif_imgdata"> 02 </span>
234<span class="byte gif_imgdata"> 00 </span>
235<span class="byte gif_graphic"> 21 </span>
236<span class="byte gif_graphic"> F9 </span>
237<span class="byte gif_graphic"> 04 </span>
238<span class="byte gif_graphic"> 04 </span>
239<span class="byte gif_graphic"> 64 </span>
240<span class="byte gif_graphic"> 00 </span>
241<span class="byte gif_graphic"> 00 </span>
242<span class="byte gif_graphic"> 00 </span>
243<span class="byte gif_imgdesc"> 2C </span>
244<span class="byte gif_imgdesc"> 02 </span>
245<span class="byte gif_imgdesc"> 00 </span>
246<span class="byte gif_imgdesc"> 02 </span>
247<span class="byte gif_imgdesc"> 00 </span>
248<span class="byte gif_imgdesc"> 07 </span>
249<span class="byte gif_imgdesc"> 00 </span>
250<span class="byte gif_imgdesc"> 10 </span>
251<span class="byte gif_imgdesc"> 00 </span>
252<span class="byte gif_imgdesc"> 00 </span>
253<span class="byte gif_imgdata"> 03 </span>
254<span class="byte gif_imgdata"> 19 </span>
255<span class="byte gif_imgdata"> 78 </span>
256<span class="byte gif_imgdata"> 07 </span>
257<span class="byte gif_imgdata"> AC </span>
258<span class="byte gif_imgdata"> CB </span>
259<span class="byte gif_imgdata"> 0D </span>
260<span class="byte gif_imgdata"> CA </span>
261<span class="byte gif_imgdata"> 49 </span>
262<span class="byte gif_imgdata"> E1 </span>
263<span class="byte gif_imgdata"> B3 </span>
264<span class="byte gif_imgdata"> 0A </span>
265<span class="byte gif_imgdata"> BB </span>
266<span class="byte gif_imgdata"> CD </span>
267<span class="byte gif_imgdata"> F7 </span>
268<span class="byte gif_imgdata"> F8 </span>
269<span class="byte gif_imgdata"> CE </span>
270<span class="byte gif_imgdata"> 27 </span>
271<span class="byte gif_imgdata"> 1E </span>
272<span class="byte gif_imgdata"> 62 </span>
273<span class="byte gif_imgdata"> 69 </span>
274<span class="byte gif_imgdata"> 9E </span>
275<span class="byte gif_imgdata"> A3 </span>
276<span class="byte gif_imgdata"> 19 </span>
277<span class="byte gif_imgdata"> 82 </span>
278<span class="byte gif_imgdata"> 47 </span>
279<span class="byte gif_imgdata"> 02 </span>
280<span class="byte gif_imgdata"> 00 </span>
281<span class="byte gif_trailer"> 3B </span>
282</p>
283
284<p>This file is similar to  the ones we've previously encountered. The
285bytes   start  out  with   the  GIF   header.  Next   we  have   a  <a
286href="bits_and_bytes.html#logical_screen_descriptor_block">logical
287screen descriptor</a> which  tells us that our image is  11px by 29 px
288and will have  a global color table  with 8 colors in it  (of which we
289only really need 5). Immediately after, follows the global color table
290which  tells  us what  those  colors  are  (0=red, 1=green,  2=yellow,
2913=light grey, 4=black, 5=white, 6=black [not used], 7=black [not used]
292).</p>
293
294<p>Next we encounter an <a
295href="bits_and_bytes.html#application_extension_block">application
296extension block</a>.  This is this block that causes our animation to
297repeat rather than play once and stop. The first three bytes tell us
298we are looking at (1) an extension block (2) of type
299&quot;application&quot; which is followed by (3) 11 bytes of fixed
300length data. These 11 bytes contain the ASCII character codes for
301&quot;NETSCAPE2.0&quot;. Then begins the actual &quot;application
302data&quot; which is contained in sub-blocks. There are two values that
303are stored in these sub-blocks. The first value is always the byte
304<span class="byte">01</span>. Then we have a value in the unsigned
305(lo-hi byte) format that says how many times the animation should
306repeat. You can see that our sample image has a value of 0; this means
307the animation should loop forever. These three bytes are preceded by
308the <span class="byte">03</span> that lets the decoder know that three
309bytes of data follow, and they are terminated by <span
310class="byte">00</span>, the block terminator.</p>
311
312<p>This very basic animation is essentially made up of three different
313&quot;scenes&quot;.  The first is the one with the green light lit,
314the second with the yellow, and the last with the red. You should be
315able to see three separate chunks of image data in the bytes
316above. </p>
317
318<table style="margin-left: auto;margin-right: auto">
319	<tr><th>1</th><th>2</th><th>3</th></tr>
320	<tr>
321	<td><img src="sample_2_animation_green.gif" alt="scene 1: green light" width="11" height="29"/></td>
322	<td><img src="sample_2_animation_yellow.gif" alt="scene 2: yellow light" width="11" height="29"/></td>
323	<td><img src="sample_2_animation_red.gif" alt="scene 3: red light" width="11" height="29"/></td>
324	</tr>
325</table>
326
327<p>The first chunk begins immediately after the application extension
328block.  It is there we encounter our first graphic control
329extension. As with all extensions, it begins with <span
330class="byte">21</span>. Next, the type specific label for the graphic
331control type of extension is <span class="byte">F9</span>. Next we see
332the byte size of the data in the block; this should always be <span
333class="byte">04</span>. The first of these four data blocks is a
334packed field. </p>
335
336<p>The packed field stores three values. The first three (highest)
337bits are &quot;reserved for future use&quot; so those have been left
338as zeros. The next three bits indicate the disposal method. The
339<em>disposal method</em> specifies what happens to the current image
340data when you move onto the next. We have three bits which means we
341can represent a number between 0 and 7. Our sample animated image has
342a value of 1 which tells the decoder to leave the image in place and
343draw the next image on top of it. A value of 2 would have meant that
344the canvas should be restored to the background color (as indicated by
345the logical screen descriptor). A value of 3 is defined to mean that
346the decoder should restore the canvas to its previous state before the
347current image was drawn. I don't believe that this value is widely
348supported but haven't had the chance to test it out. The behavior for
349values 4-7 are yet to be defined. If this image were not animated,
350these bits would have been set to 0 which indicates that do not wish
351to specify a disposal method. The seventh bit in they byte is the
352<em>user input flag</em>. When set to 1, that means that the decoder
353will wait for some sort of &quot;input&quot; from the person viewing
354the image before moving on to the next scene. I'm guessing it's highly
355unlikeley that you will encounter any other value that 0 for this bit.
356The final bit is the transparency flag. We will go into more detail
357about transparency in <a href="#transparency">the next
358section</a>. Since this image isn't using any transparency, we see
359this bit has been left at 0. </p>
360
361<p>The next two bytes are the delay time. This value is in the same
362unsigned lformat as all the other integers in the file. This number
363represents the number of hundredths of a second to wait before moving
364on to the next scene. We see that our sample image has specified
365a value of 100 (<span class="byte">64</span> <span class="byte">00</span>)
366in the first graphics control block which means we would wait 1 second
367before changing our green light to yellow.</p>
368
369<p>Our graphics control extension block ends with the block
370terminator <span class="byte">00</span>. You will notice this
371type of block appearing two more times in this image, the second
372instance differing only in the delay time (the yellow light only
373stays up for half a second).</p>
374
375<p>The next chunk is an image descriptor. The block declares that it
376will be drawing an image starting at the top left corner and taking up
377the whole canvas (11px x 29px). This block is followed by the image
378data that contains all the codes to draw the first scene, the one with
379the green light on.</p>
380
381<table style="margin-left: auto;margin-right: auto; text-align: center">
382	<tr><th>Green</th><th>(Difference)</th><th>Yellow</th></tr>
383	<tr>
384	<td><img src="sample_2_green_large.gif" alt="green light enlarged" width="33" height="87"/></td>
385	<td><img src="sample_2_green_yellow_diff.gif" alt="difference between green and yellow images"width="33" height="87"/></td>
386	<td><img src="sample_2_yellow_large.gif" alt="yellow light enlarged" width="33" height="87"/></td>
387	</tr>
388</table>
389
390<p>If we compare the first and the second scene, we see they share many
391of the same pixel color values. Rather than redrawing the whole canvas,
392we can specify just the part that changes (that is, the smallest
393rectangle that covers the part that changes). You'll see that the
394image descriptor before the second block of image data specifies
395that it will start at the pixel at (2, 11) and draws a box that's
3967px wide by 16px tall. This is just large enough to cover the bottom two
397lights. The works because we chose the &quot;do not dispose&quot; disposal
398method for out graphics control extension block. In the same way,
399the third and final image data block only renders the top two circles
400to both fill in the red and cover up the yellow.</p>
401
402<h2><a name="transparency">Transparency</a></h2>
403
404<p>Normally, GIF images are rectangles that cover up what ever
405background may be beneath them. Transparency allows you to &quot;see
406though&quot; the image to whatever is below. This is a very simple
407trick to pull off in a GIF image. You can set up one color in your
408color table that is converted to &quot;invisible ink.&quot; Then, as
409the image is drawn, whenever this special color is encountered, the
410background is allowed to show through.</p>
411
412<p>There are only two pieces of data we have to set to pull this
413off. First we must set the Transparency Color Flag to 1. This is the
414lowest bit in the packed byte of the Graphic Control Extension. This
415will tell the decoder that we want our image to have a transparent
416component.  Secondly we must tell the decoder which color we want to
417use as our invisible ink. The decoder will then all you to see thought
418every pixel that contains this color. Therefore make sure it's not a
419color that you are using else where in your image. The color you
420choose must be in the active color table and you specify its value in
421the Transparent Color Index byte by setting this value to the index of
422the color in the color table.</p>
423
424<p>Let's demonstrate this by revisiting the sample image we used
425in <a href="bits_and_bytes.html">Bits and Bytes</a>. We will update this
426file to make the white center part transparent. Let's start creating
427the Graphic Control Extension block that will do this for us. Again we
428start with the <span class="byte">21</span> <span class="byte">F9</span>
429<span class="byte">04</span> punch. In the next byte, we need to flip
430the transparent color flag to 1 (we can leave the others at zero) so
431this whole byte is simply <span class="byte">01</span>. The next two
432bytes can be left at zero.</p>
433
434<p>We must now specify which color to disappear.  Recall that our
435sample image had the following global color table:</p>
436
437<table style="margin-left: auto; margin-right: auto">
438	<tr><th>Index</th><th>Color</th></tr>
439	<tr><td>0</td><td><span style="color:#FFFFFF; background: #000000; font-weight: bold">White</span></td></tr>
440	<tr><td>1</td><td><span style="color:#FF0000; font-weight: bold">Red</span></td></tr>
441	<tr><td>2</td><td><span style="color:#0000FF; font-weight: bold">Blue</span></td></tr>
442	<tr><td>3</td><td><span style="font-weight: bold">Black</span></td></tr>
443</table>
444
445<p>We already know what we want to make all the white sections
446transparent.  The color white has an index of 0. Therefore we will
447specify a value of <span class="byte">00</span> for the transparent
448color index block.  Had we wanted to make the red transparent we would
449have used <span class="byte">01</span>, or <span
450class="byte">02</span> for blue.  Lastly we tack on the block
451terminator of <span class="byte">00</span> and we're done. We have
452created the following block:</p>
453
454<p>
455<span class="byte gif_graphic"> 21 </span>
456<span class="byte gif_graphic"> F9 </span>
457<span class="byte gif_graphic"> 04 </span>
458<span class="byte gif_graphic"> 01 </span>
459<span class="byte gif_graphic"> 00 </span>
460<span class="byte gif_graphic"> 00 </span>
461<span class="byte gif_graphic"> 00 </span>
462<span class="byte gif_graphic"> 00 </span>
463</p>
464
465<p>Now, all we have to do is plug this into our sample image right before the
466image descriptor. I've placed our original sample image on a black background
467as well as the one we just made so you can see the results. I've also included
468ones where red or blue are transparent. The last three differ by only the
469transparent color index byte.</p>
470
471<table cellpadding="10px" style="text-align: center; margin-left: auto; margin-right: auto">
472<tr>
473<th style="width:25%">Original</th>
474<th style="width:25%">Transparent <br/>
475White (<span class="byte">00</span>)</th>
476<th style="width:25%">Transparent <br/>
477Red (<span class="byte">01</span>)</th>
478<th style="width:25%">Transparent <br/>
479Blue (<span class="byte">02</span>)</th>
480</tr>
481<tr>
482<td style="width:25%; background-color: black">
483<img src="sample_1.gif" alt="previous sample" width="10" height="10"/></td>
484<td style="width:25%; background-color: black">
485<img src="sample_1_trans.gif" alt="transparent white" width="10" height="10"/></td>
486<td style="width:25%; background-color: black">
487<img src="sample_1_trans_red.gif" alt="transparent red" width="10" height="10"/></td>
488<td style="width:25%; background-color: black">
489<img src="sample_1_trans_blue.gif" alt="transparent blue" width="10" height="10"/></td>
490</tr>
491</table>
492
493<p>This concludes our description of the bits inside GIFs.  If you
494have not already read the <a href="../gif_lib.html">documentation of
495the GIFLIB API</a>, you may wish to continue with that.</p>
496
497</div>
498
499<div style="text-align:center; margin-top: 10px; padding-top: 10px; border-top: #cecece 1px solid">
500<a href="../index.html">Back to GIFLIB documentation</a>
501</div>
502
503</body>
504
505</html>
506