xref: /aosp_15_r20/external/giflib/doc/whatsinagif/lzw_image_data.html (revision 324bb76b8d05e2a05aa88511fff61cf3f9ca5892)
1*324bb76bSAndroid Build Coastguard Worker<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2*324bb76bSAndroid Build Coastguard Worker
3*324bb76bSAndroid Build Coastguard Worker<html>
4*324bb76bSAndroid Build Coastguard Worker<head>
5*324bb76bSAndroid Build Coastguard Worker<title>What's In A GIF - LZW Image Data</title>
6*324bb76bSAndroid Build Coastguard Worker<style type="text/css">
7*324bb76bSAndroid Build Coastguard Worker.byte {font-family: Courier, fixed;
8*324bb76bSAndroid Build Coastguard Worker	padding: .2em}
9*324bb76bSAndroid Build Coastguard Worker.gif_header {background-color: #f9E89D}
10*324bb76bSAndroid Build Coastguard Worker.gif_screen {background-color: #C8DBD9}
11*324bb76bSAndroid Build Coastguard Worker.gif_color {background-color: #E1E1E1}
12*324bb76bSAndroid Build Coastguard Worker.gif_graphic {background-color: #F9EB9D}
13*324bb76bSAndroid Build Coastguard Worker.gif_imgdesc {background-color: #C2D1DC}
14*324bb76bSAndroid Build Coastguard Worker.gif_imgdata {background-color: #D0C4C4}
15*324bb76bSAndroid Build Coastguard Worker.gif_trailer {background-color: #f9E89D}
16*324bb76bSAndroid Build Coastguard Worker.gif_ext {background-color: #D0CFAE}
17*324bb76bSAndroid Build Coastguard Worker#global_color_size {margin-left: auto; margin-right:auto; border:1px solid black;}
18*324bb76bSAndroid Build Coastguard Worker#global_color_size th {border-bottom: 1px solid #666666}
19*324bb76bSAndroid Build Coastguard Worker#global_color_size td {text-align:center;}
20*324bb76bSAndroid Build Coastguard Worker.code_table {margin-left: auto; margin-right:auto; border:1px solid black;}
21*324bb76bSAndroid Build Coastguard Worker.code_table th {text-align: left; border-bottom: 1px solid #666666}
22*324bb76bSAndroid Build Coastguard Worker.alg_steps {margin: 0 auto; border: 1px solid black}
23*324bb76bSAndroid Build Coastguard Worker.alg_steps th, .alg_steps td {border: 1px solid black}
24*324bb76bSAndroid Build Coastguard Worker.alg_steps .index {padding: 0 .3em}
25*324bb76bSAndroid Build Coastguard Worker.alg_steps .processed {color: #CCC}
26*324bb76bSAndroid Build Coastguard Worker.alg_steps .buffer {background-color: #c0efc0; border-top: 1px solid #c0efc0; border-bottom: 1px solid #c0efc0;}
27*324bb76bSAndroid Build Coastguard Worker.alg_steps .current {background-color: #e0d0e0; border-top: 1px solid #e0d0e0; border-bottom: 1px solid #e0d0e0;}
28*324bb76bSAndroid Build Coastguard Worker</style>
29*324bb76bSAndroid Build Coastguard Worker</head>
30*324bb76bSAndroid Build Coastguard Worker<body>
31*324bb76bSAndroid Build Coastguard Worker<table width='100%' cellpadding='0' summary='Canned page header' bgcolor="#ddd">
32*324bb76bSAndroid Build Coastguard Worker<tr>
33*324bb76bSAndroid Build Coastguard Worker<td><h2>What's In A GIF</h2></td>
34*324bb76bSAndroid Build Coastguard Worker<td align="center"><img src="../giflib-logo.gif"></td>
35*324bb76bSAndroid Build Coastguard Worker<td align="right">(LZW image data)</td>
36*324bb76bSAndroid Build Coastguard Worker</tr>
37*324bb76bSAndroid Build Coastguard Worker</table>
38*324bb76bSAndroid Build Coastguard Worker
39*324bb76bSAndroid Build Coastguard Worker<div id="body">
40*324bb76bSAndroid Build Coastguard Worker<div style="text-align:center; margin-top: 10px; padding-top: 10px; border-top: #cecece 1px solid">
41*324bb76bSAndroid Build Coastguard Worker<p><a href="index.html">Back to the GIF index page.</a></p>
42*324bb76bSAndroid Build Coastguard Worker</div>
43*324bb76bSAndroid Build Coastguard Worker
44*324bb76bSAndroid Build Coastguard Worker<p>Now let's look at exactly how we go about storing an image in a GIF
45*324bb76bSAndroid Build Coastguard Workerfile. The GIF format is a raster format, meaning it stores image data
46*324bb76bSAndroid Build Coastguard Workerby remembering the color of every pixel in the image. More
47*324bb76bSAndroid Build Coastguard Workerspecifically, GIF files remember the index of the color in a color
48*324bb76bSAndroid Build Coastguard Workertable for each pixel. To make that clearer, let's review the
49*324bb76bSAndroid Build Coastguard Workersample image we used in the <a href="bits_and_bytes.html">first
50*324bb76bSAndroid Build Coastguard Workersection</a>.</p>
51*324bb76bSAndroid Build Coastguard Worker
52*324bb76bSAndroid Build Coastguard Worker<table style="margin-left: auto; margin-right:auto;">
53*324bb76bSAndroid Build Coastguard Worker<tr>
54*324bb76bSAndroid Build Coastguard Worker<td style="text-align:center; vertical-align: top; padding: 5px;width:30%">
55*324bb76bSAndroid Build Coastguard Worker<h3>Actual Size</h3>
56*324bb76bSAndroid Build Coastguard Worker<img src="sample_1.gif" alt="sample gif, actual size" title="Actual Size"
57*324bb76bSAndroid Build Coastguard Workerwidth="10" height="10" style="padding: 20px" /><br/>(10x10)</td>
58*324bb76bSAndroid Build Coastguard Worker<td style="text-align:center; vertical-align: top; padding: 5px;; width:40%">
59*324bb76bSAndroid Build Coastguard Worker<h3>Enlarged</h3>
60*324bb76bSAndroid Build Coastguard Worker<img src="sample_1_enlarged.gif" alt="sample gif, enlarged"
61*324bb76bSAndroid Build Coastguard Workertitle="Enlarged" width="100" height="100" /><br/>(100x100)</td>
62*324bb76bSAndroid Build Coastguard Worker<td style="vertical-align: top; padding: 5px; width:30%">
63*324bb76bSAndroid Build Coastguard Worker<h3>Color Table</h3>
64*324bb76bSAndroid Build Coastguard Worker<table>
65*324bb76bSAndroid Build Coastguard Worker<tr><th>Index</th><th>Color</th></tr>
66*324bb76bSAndroid Build Coastguard Worker<tr><td>0</td><td><span style="color:#FFFFFF; background: #000000; font-weight: bold">White</span></td></tr>
67*324bb76bSAndroid Build Coastguard Worker<tr><td>1</td><td><span style="color:#FF0000; font-weight: bold">Red</span></td></tr>
68*324bb76bSAndroid Build Coastguard Worker<tr><td>2</td><td><span style="color:#0000FF; font-weight: bold">Blue</span></td></tr>
69*324bb76bSAndroid Build Coastguard Worker<tr><td>3</td><td><span style="font-weight: bold">Black</span></td></tr>
70*324bb76bSAndroid Build Coastguard Worker</table>
71*324bb76bSAndroid Build Coastguard Worker</td>
72*324bb76bSAndroid Build Coastguard Worker</tr></table>
73*324bb76bSAndroid Build Coastguard Worker
74*324bb76bSAndroid Build Coastguard Worker<p>The color table came from the global color table block. The colors
75*324bb76bSAndroid Build Coastguard Workerare listed in the order which they appear in the file. The first color
76*324bb76bSAndroid Build Coastguard Workeris given an index of zero. When we send the codes, we always start at
77*324bb76bSAndroid Build Coastguard Workerthe top left of the image and work our way right. When we get to the
78*324bb76bSAndroid Build Coastguard Workerend of the line, the very next code is the one that starts the next
79*324bb76bSAndroid Build Coastguard Workerline. (The decoder will &quot;wrap&quot; the image based on the image
80*324bb76bSAndroid Build Coastguard Workerdimensions.) We could encode our sample image in the following
81*324bb76bSAndroid Build Coastguard Workerway:</p>
82*324bb76bSAndroid Build Coastguard Worker
83*324bb76bSAndroid Build Coastguard Worker<blockquote><p>1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1,
84*324bb76bSAndroid Build Coastguard Worker1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1,
85*324bb76bSAndroid Build Coastguard Worker0, 0, 0, 0, 2, 2, 2, ...</p></blockquote>
86*324bb76bSAndroid Build Coastguard Worker
87*324bb76bSAndroid Build Coastguard Worker<p>The above listing shows the sequence required to render the first five
88*324bb76bSAndroid Build Coastguard Workerlines of the image. We could continue with this method until we've
89*324bb76bSAndroid Build Coastguard Workerspecified the color for every pixel; however, this can result in a
90*324bb76bSAndroid Build Coastguard Workerrather large file. Luckily for us, the GIF format allows us to take
91*324bb76bSAndroid Build Coastguard Workeradvantage of repetition in our output and to compress our data.</p>
92*324bb76bSAndroid Build Coastguard Worker
93*324bb76bSAndroid Build Coastguard Worker<p>Much of the following information came from John Barkaus's tutorial
94*324bb76bSAndroid Build Coastguard Worker<cite>LZW and GIF Explained</cite>, which seems to have fallen off the
95*324bb76bSAndroid Build Coastguard Workerweb.  I've tried to provide more detailed samples as well
96*324bb76bSAndroid Build Coastguard Workeras illustrations to make the process even clearer</p>
97*324bb76bSAndroid Build Coastguard Worker
98*324bb76bSAndroid Build Coastguard Worker<h2><a name="lzw_compression">LZW Compression</a></h2>
99*324bb76bSAndroid Build Coastguard Worker
100*324bb76bSAndroid Build Coastguard Worker<p>The compression method GIF use is a variant of LZW
101*324bb76bSAndroid Build Coastguard Worker(Lempel-Ziv-Welch) compression. To start using this method, we need a
102*324bb76bSAndroid Build Coastguard Worker<strong>code table</strong>. This code table will allow us to use
103*324bb76bSAndroid Build Coastguard Workerspecial codes to indicate a sequence of colors rather than just one at
104*324bb76bSAndroid Build Coastguard Workera time.  The first thing we do is to <em>initialize the code
105*324bb76bSAndroid Build Coastguard Workertable</em>.  We start by adding a code for each of the colors in the
106*324bb76bSAndroid Build Coastguard Workercolor table. This would be a local color table if one was provided, or
107*324bb76bSAndroid Build Coastguard Workerthe global color table. (I will be starting all codes with
108*324bb76bSAndroid Build Coastguard Worker&quot;#&quot; to distinguish them from color indexes.)</p>
109*324bb76bSAndroid Build Coastguard Worker
110*324bb76bSAndroid Build Coastguard Worker<table class="code_table">
111*324bb76bSAndroid Build Coastguard Worker<tr><th>Code</th><th>Color(s)</th></tr>
112*324bb76bSAndroid Build Coastguard Worker<tr><td>#0</td><td>0</td></tr>
113*324bb76bSAndroid Build Coastguard Worker<tr><td>#1</td><td>1</td></tr>
114*324bb76bSAndroid Build Coastguard Worker<tr><td>#2</td><td>2</td></tr>
115*324bb76bSAndroid Build Coastguard Worker<tr><td>#3</td><td>3</td></tr>
116*324bb76bSAndroid Build Coastguard Worker<tr><td>#4</td><td>Clear Code</td></tr>
117*324bb76bSAndroid Build Coastguard Worker<tr><td>#5</td><td>End Of Information Code</td></tr>
118*324bb76bSAndroid Build Coastguard Worker</table>
119*324bb76bSAndroid Build Coastguard Worker
120*324bb76bSAndroid Build Coastguard Worker<p>I added a code for each of the colors in the global color table of
121*324bb76bSAndroid Build Coastguard Workerour sample image. I also snuck in two special control codes.  (These
122*324bb76bSAndroid Build Coastguard Workerspecial codes are only used in the GIF version of LZW, not in standard
123*324bb76bSAndroid Build Coastguard WorkerLZW compression.) Our code table is now considered initialized.</p>
124*324bb76bSAndroid Build Coastguard Worker
125*324bb76bSAndroid Build Coastguard Worker<p>Let me now explain what those special codes are for. The first new code
126*324bb76bSAndroid Build Coastguard Workeris the <em>clear code</em> (CC). Whenever you come across the clear code
127*324bb76bSAndroid Build Coastguard Workerin the image data, it's your cue to reinitialize the code table. (I'll
128*324bb76bSAndroid Build Coastguard Workerexplain why you might need to do this in a bit.) The second new code
129*324bb76bSAndroid Build Coastguard Workeris the <em>end of information code</em> (EOI). When you come across
130*324bb76bSAndroid Build Coastguard Workerthis code, this means you've reached the end of the image. Here I've placed
131*324bb76bSAndroid Build Coastguard Workerthe special codes right after the color codes, but actually the value of
132*324bb76bSAndroid Build Coastguard Workerthe special codes depends on the value of the LZW minimum code size
133*324bb76bSAndroid Build Coastguard Workerfrom the image data block. If the LZW minimum code size is the same as
134*324bb76bSAndroid Build Coastguard Workerthe color table size, then special codes immediatly follow the colors; however
135*324bb76bSAndroid Build Coastguard Workerit is possible to specify a larger LZW minimum code size which may leave
136*324bb76bSAndroid Build Coastguard Workera gap in the codes where no colors are assigned. This can be
137*324bb76bSAndroid Build Coastguard Workersummarizaed in the <a name="color_table_size">following table</a>.</p>
138*324bb76bSAndroid Build Coastguard Worker
139*324bb76bSAndroid Build Coastguard Worker<div style="text-align:center">
140*324bb76bSAndroid Build Coastguard Worker<table id="global_color_size">
141*324bb76bSAndroid Build Coastguard Worker<tr><th>LZW Min Code<br/>Size</th><th>Color<br/>Codes</th><th>Clear<br/>Code</th><th>EOI<br/>Code</th></tr>
142*324bb76bSAndroid Build Coastguard Worker<tr><td>2</td><td>#0-#3</td><td>#4</td><td>#5</td></tr>
143*324bb76bSAndroid Build Coastguard Worker<tr><td>3</td><td>#0-#7</td><td>#8</td><td>#9</td></tr>
144*324bb76bSAndroid Build Coastguard Worker<tr><td>4</td><td>#0-#15</td><td>#16</td><td>#17</td></tr>
145*324bb76bSAndroid Build Coastguard Worker<tr><td>5</td><td>#0-#31</td><td>#32</td><td>#33</td></tr>
146*324bb76bSAndroid Build Coastguard Worker<tr><td>6</td><td>#0-#63</td><td>#64</td><td>#65</td></tr>
147*324bb76bSAndroid Build Coastguard Worker<tr><td>7</td><td>#0-#127</td><td>#128</td><td>#129</td></tr>
148*324bb76bSAndroid Build Coastguard Worker<tr><td>8</td><td>#0-#255</td><td>#256</td><td>#257</td></tr>
149*324bb76bSAndroid Build Coastguard Worker</table>
150*324bb76bSAndroid Build Coastguard Worker</div>
151*324bb76bSAndroid Build Coastguard Worker
152*324bb76bSAndroid Build Coastguard Worker<p>Before we proceed, let me define two more terms. First the <strong>index
153*324bb76bSAndroid Build Coastguard Workerstream</strong> will be the list of indexes of the color for each of
154*324bb76bSAndroid Build Coastguard Workerthe pixels. This is the input we will be compressing. The <strong>code
155*324bb76bSAndroid Build Coastguard Workerstream</strong> will be the list of codes we generate as output. The
156*324bb76bSAndroid Build Coastguard Worker<strong>index buffer</strong> will be the list of color indexes
157*324bb76bSAndroid Build Coastguard Workerwe care &quot;currently looking at.&quot; The index buffer will contain a list
158*324bb76bSAndroid Build Coastguard Workerof one or more color indexes. Now we can step though the LZW
159*324bb76bSAndroid Build Coastguard Workercompression algorithm. First, I'll just list the steps. After that
160*324bb76bSAndroid Build Coastguard WorkerI'll walk through the steps with our specific example.</p>
161*324bb76bSAndroid Build Coastguard Worker
162*324bb76bSAndroid Build Coastguard Worker<ul>
163*324bb76bSAndroid Build Coastguard Worker<li>Initialize code table</li>
164*324bb76bSAndroid Build Coastguard Worker<li>Always start by sending a clear code to the code stream.</li>
165*324bb76bSAndroid Build Coastguard Worker<li>Read first index from index stream. This value is now the value
166*324bb76bSAndroid Build Coastguard Workerfor the index buffer</li>
167*324bb76bSAndroid Build Coastguard Worker<li>&lt;LOOP POINT&gt;</li>
168*324bb76bSAndroid Build Coastguard Worker<li>Get the next index from the index stream to the index buffer. We will
169*324bb76bSAndroid Build Coastguard Workercall this index, K</li>
170*324bb76bSAndroid Build Coastguard Worker<li>Is index buffer + K in our code table?</li>
171*324bb76bSAndroid Build Coastguard Worker<li>Yes:
172*324bb76bSAndroid Build Coastguard Worker	<ul>
173*324bb76bSAndroid Build Coastguard Worker	<li>add K to the end of the index buffer</li>
174*324bb76bSAndroid Build Coastguard Worker	<li>if there are more indexes, return to LOOP POINT</li>
175*324bb76bSAndroid Build Coastguard Worker	</ul>
176*324bb76bSAndroid Build Coastguard Worker</li>
177*324bb76bSAndroid Build Coastguard Worker<li>No:
178*324bb76bSAndroid Build Coastguard Worker	<ul>
179*324bb76bSAndroid Build Coastguard Worker	<li>Add a row for index buffer + K into our code table with
180*324bb76bSAndroid Build Coastguard Worker	the next smallest code</li>
181*324bb76bSAndroid Build Coastguard Worker	<li>Output the code for just the index buffer to our code steam</li>
182*324bb76bSAndroid Build Coastguard Worker	<li>Index buffer is set to K</li>
183*324bb76bSAndroid Build Coastguard Worker	<li>K is set to nothing</li>
184*324bb76bSAndroid Build Coastguard Worker	<li>if there are more indexes, return to LOOP POINT</li>
185*324bb76bSAndroid Build Coastguard Worker	</ul>
186*324bb76bSAndroid Build Coastguard Worker</li>
187*324bb76bSAndroid Build Coastguard Worker<li>Output code for contents of index buffer</li>
188*324bb76bSAndroid Build Coastguard Worker<li>Output end-of-information code</li>
189*324bb76bSAndroid Build Coastguard Worker</ul>
190*324bb76bSAndroid Build Coastguard Worker
191*324bb76bSAndroid Build Coastguard Worker<p>Seems simple enough, right? It really isn't all that bad. Let's
192*324bb76bSAndroid Build Coastguard Workerwalk though our sample image to show you how this works. (The steps I
193*324bb76bSAndroid Build Coastguard Workerwill be describing are summarized in the following table. Numbers
194*324bb76bSAndroid Build Coastguard Workerhighlighted in green are in the index buffer; numbers in purple are
195*324bb76bSAndroid Build Coastguard Workerthe current K value.)  We have already initialized our code table. We
196*324bb76bSAndroid Build Coastguard Workerstart by doing two things: we output our clear code (#4) to the code
197*324bb76bSAndroid Build Coastguard Workerstream, and we read the first color index from the index stream, 1,
198*324bb76bSAndroid Build Coastguard Workerinto our index buffer [Step 0].</p>
199*324bb76bSAndroid Build Coastguard Worker
200*324bb76bSAndroid Build Coastguard Worker<p>Now we enter the main loop of the algorithm. We read the next index
201*324bb76bSAndroid Build Coastguard Workerin the index stream, 1, into K [Step 1]. Next we see if we have a
202*324bb76bSAndroid Build Coastguard Workerrecord for the index buffer plus K in the code stream. In this case we
203*324bb76bSAndroid Build Coastguard Workerlooking for 1,1. Currently our code table only contains single colors
204*324bb76bSAndroid Build Coastguard Workerso this value is not in there. Now we will actually add a new row to
205*324bb76bSAndroid Build Coastguard Workerour code table that does contain this value.  The next available code
206*324bb76bSAndroid Build Coastguard Workeris #6, we will let #6 be 1,1. Note that we do not actually send this
207*324bb76bSAndroid Build Coastguard Workercode to the code stream, instead we send just the code for the
208*324bb76bSAndroid Build Coastguard Workervalue(s) in the index buffer. The index buffer is just 1 and the code
209*324bb76bSAndroid Build Coastguard Workerfor 1 is #1. This is the code we output. We now reset the index buffer
210*324bb76bSAndroid Build Coastguard Workerto just the value in K and K becomes nothing. [Step 2].</p>
211*324bb76bSAndroid Build Coastguard Worker
212*324bb76bSAndroid Build Coastguard Worker<p>We continue by reading the next index into K. [Step 3]. Now K is 1 and the
213*324bb76bSAndroid Build Coastguard Workerindex buffer is 1. Again we look to see if there is a value in our code
214*324bb76bSAndroid Build Coastguard Workertable for the buffer plus K (1,1) and this time there is. (In fact we just
215*324bb76bSAndroid Build Coastguard Workeradded it.) Therefore we add K to the end of the index buffer and clear out
216*324bb76bSAndroid Build Coastguard WorkerK. Now our index buffer is 1,1. [Step 4].</p>
217*324bb76bSAndroid Build Coastguard Worker
218*324bb76bSAndroid Build Coastguard Worker<p>The next index in the index stream is yet another 1. This is our
219*324bb76bSAndroid Build Coastguard Workernew K [Step 5].  Now the index buffer plus K is 1,1,1 which we do not
220*324bb76bSAndroid Build Coastguard Workerhave a code for in our code table. As we did before, we define a new
221*324bb76bSAndroid Build Coastguard Workercode and add it to the code table. The next code would be #7; thus #7
222*324bb76bSAndroid Build Coastguard Worker= 1, 1, 1. Now we kick out the code for just the values in the index
223*324bb76bSAndroid Build Coastguard Workerbuffer (#6 = 1,1) to the code stream and set the index buffer to be
224*324bb76bSAndroid Build Coastguard WorkerK. [Step 6].</p>
225*324bb76bSAndroid Build Coastguard Worker
226*324bb76bSAndroid Build Coastguard Worker<table class="alg_steps" cellspacing="0">
227*324bb76bSAndroid Build Coastguard Worker<thead>
228*324bb76bSAndroid Build Coastguard Worker<tr>
229*324bb76bSAndroid Build Coastguard Worker	<th>Step</th>
230*324bb76bSAndroid Build Coastguard Worker	<th>Action</th>
231*324bb76bSAndroid Build Coastguard Worker	<th>Index Stream</th>
232*324bb76bSAndroid Build Coastguard Worker	<th>New Code Table Row</th>
233*324bb76bSAndroid Build Coastguard Worker	<th>Code Stream</th>
234*324bb76bSAndroid Build Coastguard Worker</tr>
235*324bb76bSAndroid Build Coastguard Worker</thead>
236*324bb76bSAndroid Build Coastguard Worker<tbody>
237*324bb76bSAndroid Build Coastguard Worker<tr>
238*324bb76bSAndroid Build Coastguard Worker	<td>0</td>
239*324bb76bSAndroid Build Coastguard Worker	<td>Init</td>
240*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"></span>
241*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
242*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
243*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
244*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
245*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
246*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
247*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
248*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
249*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
250*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
251*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
252*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
253*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
254*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
255*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
256*324bb76bSAndroid Build Coastguard Worker	<td>#4</td>
257*324bb76bSAndroid Build Coastguard Worker</tr>
258*324bb76bSAndroid Build Coastguard Worker
259*324bb76bSAndroid Build Coastguard Worker<tr>
260*324bb76bSAndroid Build Coastguard Worker	<td>1</td>
261*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
262*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"></span>
263*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
264*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
265*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
266*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
267*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
268*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
269*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
270*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
271*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
272*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
273*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
274*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
275*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
276*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
277*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
278*324bb76bSAndroid Build Coastguard Worker	<td>#4</td>
279*324bb76bSAndroid Build Coastguard Worker</tr>
280*324bb76bSAndroid Build Coastguard Worker
281*324bb76bSAndroid Build Coastguard Worker<tr>
282*324bb76bSAndroid Build Coastguard Worker	<td>2</td>
283*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
284*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span></span>
285*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
286*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
287*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
288*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
289*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
290*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
291*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
292*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
293*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
294*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
295*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
296*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
297*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
298*324bb76bSAndroid Build Coastguard Worker	<td>#6 - 1, 1</td>
299*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1</td>
300*324bb76bSAndroid Build Coastguard Worker</tr>
301*324bb76bSAndroid Build Coastguard Worker
302*324bb76bSAndroid Build Coastguard Worker<tr>
303*324bb76bSAndroid Build Coastguard Worker	<td>3</td>
304*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
305*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span></span>
306*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
307*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
308*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
309*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
310*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
311*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
312*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
313*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
314*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
315*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
316*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
317*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
318*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
319*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
320*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1</td>
321*324bb76bSAndroid Build Coastguard Worker</tr>
322*324bb76bSAndroid Build Coastguard Worker
323*324bb76bSAndroid Build Coastguard Worker<tr>
324*324bb76bSAndroid Build Coastguard Worker	<td>4</td>
325*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
326*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span></span>
327*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
328*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
329*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
330*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
331*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
332*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
333*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
334*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
335*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
336*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
337*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
338*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
339*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
340*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
341*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1</td>
342*324bb76bSAndroid Build Coastguard Worker</tr>
343*324bb76bSAndroid Build Coastguard Worker
344*324bb76bSAndroid Build Coastguard Worker<tr>
345*324bb76bSAndroid Build Coastguard Worker	<td>5</td>
346*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
347*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span></span>
348*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
349*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
350*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
351*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
352*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
353*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
354*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
355*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
356*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
357*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
358*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
359*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
360*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
361*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
362*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1</td>
363*324bb76bSAndroid Build Coastguard Worker</tr>
364*324bb76bSAndroid Build Coastguard Worker
365*324bb76bSAndroid Build Coastguard Worker<tr>
366*324bb76bSAndroid Build Coastguard Worker	<td>6</td>
367*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
368*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
369*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
370*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
371*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
372*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
373*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
374*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
375*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
376*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
377*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
378*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
379*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
380*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
381*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
382*324bb76bSAndroid Build Coastguard Worker	<td>#7 - 1, 1, 1</td>
383*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6</td>
384*324bb76bSAndroid Build Coastguard Worker</tr>
385*324bb76bSAndroid Build Coastguard Worker</tbody>
386*324bb76bSAndroid Build Coastguard Worker<tbody id="compress_more">
387*324bb76bSAndroid Build Coastguard Worker
388*324bb76bSAndroid Build Coastguard Worker<tr>
389*324bb76bSAndroid Build Coastguard Worker	<td>7</td>
390*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
391*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
392*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
393*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
394*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
395*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
396*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
397*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
398*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
399*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
400*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
401*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
402*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
403*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
404*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
405*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
406*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6</td>
407*324bb76bSAndroid Build Coastguard Worker</tr>
408*324bb76bSAndroid Build Coastguard Worker
409*324bb76bSAndroid Build Coastguard Worker<tr>
410*324bb76bSAndroid Build Coastguard Worker	<td>8</td>
411*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
412*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
413*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
414*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
415*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
416*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
417*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
418*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
419*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
420*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
421*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
422*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
423*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
424*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
425*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
426*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
427*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6</td>
428*324bb76bSAndroid Build Coastguard Worker</tr>
429*324bb76bSAndroid Build Coastguard Worker
430*324bb76bSAndroid Build Coastguard Worker<tr>
431*324bb76bSAndroid Build Coastguard Worker	<td>9</td>
432*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
433*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
434*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
435*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
436*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
437*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
438*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">2</span></span>
439*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
440*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
441*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
442*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
443*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
444*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
445*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
446*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
447*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
448*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6</td>
449*324bb76bSAndroid Build Coastguard Worker</tr>
450*324bb76bSAndroid Build Coastguard Worker
451*324bb76bSAndroid Build Coastguard Worker<tr>
452*324bb76bSAndroid Build Coastguard Worker	<td>10</td>
453*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
454*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
455*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
456*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
457*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
458*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
459*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
460*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
461*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
462*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
463*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
464*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
465*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
466*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
467*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
468*324bb76bSAndroid Build Coastguard Worker	<td>#8 - 1, 1, 2</td>
469*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6</td>
470*324bb76bSAndroid Build Coastguard Worker</tr>
471*324bb76bSAndroid Build Coastguard Worker
472*324bb76bSAndroid Build Coastguard Worker<tr>
473*324bb76bSAndroid Build Coastguard Worker	<td>11</td>
474*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
475*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
476*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
477*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
478*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
479*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
480*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
481*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">2</span></span>
482*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
483*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
484*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
485*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
486*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
487*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
488*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
489*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
490*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6</td>
491*324bb76bSAndroid Build Coastguard Worker</tr>
492*324bb76bSAndroid Build Coastguard Worker
493*324bb76bSAndroid Build Coastguard Worker<tr>
494*324bb76bSAndroid Build Coastguard Worker	<td>12</td>
495*324bb76bSAndroid Build Coastguard Worker	<td>Not Found </td>
496*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
497*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
498*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
499*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
500*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
501*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
502*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
503*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
504*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
505*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
506*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
507*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
508*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
509*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
510*324bb76bSAndroid Build Coastguard Worker	<td>#9 - 2, 2</td>
511*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2</td>
512*324bb76bSAndroid Build Coastguard Worker</tr>
513*324bb76bSAndroid Build Coastguard Worker
514*324bb76bSAndroid Build Coastguard Worker<tr>
515*324bb76bSAndroid Build Coastguard Worker	<td>13</td>
516*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
517*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
518*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
519*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
520*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
521*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
522*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
523*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
524*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">2</span></span>
525*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
526*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
527*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
528*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
529*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
530*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
531*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
532*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2</td>
533*324bb76bSAndroid Build Coastguard Worker</tr>
534*324bb76bSAndroid Build Coastguard Worker
535*324bb76bSAndroid Build Coastguard Worker<tr>
536*324bb76bSAndroid Build Coastguard Worker	<td>14</td>
537*324bb76bSAndroid Build Coastguard Worker	<td>Found </td>
538*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
539*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
540*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
541*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
542*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
543*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
544*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span>
545*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
546*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
547*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
548*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
549*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
550*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
551*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
552*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
553*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2</td>
554*324bb76bSAndroid Build Coastguard Worker</tr>
555*324bb76bSAndroid Build Coastguard Worker
556*324bb76bSAndroid Build Coastguard Worker<tr>
557*324bb76bSAndroid Build Coastguard Worker	<td>15</td>
558*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
559*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
560*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
561*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
562*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
563*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
564*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
565*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span>
566*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
567*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">2</span></span>
568*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
569*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
570*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
571*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
572*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
573*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
574*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2</td>
575*324bb76bSAndroid Build Coastguard Worker</tr>
576*324bb76bSAndroid Build Coastguard Worker
577*324bb76bSAndroid Build Coastguard Worker<tr>
578*324bb76bSAndroid Build Coastguard Worker	<td>16</td>
579*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
580*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
581*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
582*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
583*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
584*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
585*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
586*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
587*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
588*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
589*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
590*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
591*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
592*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
593*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
594*324bb76bSAndroid Build Coastguard Worker	<td>#10 - 2, 2, 2</td>
595*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9</td>
596*324bb76bSAndroid Build Coastguard Worker</tr>
597*324bb76bSAndroid Build Coastguard Worker
598*324bb76bSAndroid Build Coastguard Worker<tr>
599*324bb76bSAndroid Build Coastguard Worker	<td>17</td>
600*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
601*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
602*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
603*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
604*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
605*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
606*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
607*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
608*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
609*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span></span>
610*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">2</span></span>
611*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
612*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
613*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
614*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
615*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
616*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9</td>
617*324bb76bSAndroid Build Coastguard Worker</tr>
618*324bb76bSAndroid Build Coastguard Worker
619*324bb76bSAndroid Build Coastguard Worker<tr>
620*324bb76bSAndroid Build Coastguard Worker	<td>18</td>
621*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
622*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
623*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
624*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
625*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
626*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
627*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
628*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
629*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
630*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span>
631*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
632*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
633*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
634*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
635*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
636*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
637*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9</td>
638*324bb76bSAndroid Build Coastguard Worker</tr>
639*324bb76bSAndroid Build Coastguard Worker
640*324bb76bSAndroid Build Coastguard Worker<tr>
641*324bb76bSAndroid Build Coastguard Worker	<td>19</td>
642*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
643*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
644*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
645*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
646*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
647*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
648*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
649*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
650*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
651*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">2</span>
652*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
653*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
654*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
655*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
656*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
657*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
658*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9</td>
659*324bb76bSAndroid Build Coastguard Worker</tr>
660*324bb76bSAndroid Build Coastguard Worker
661*324bb76bSAndroid Build Coastguard Worker<tr>
662*324bb76bSAndroid Build Coastguard Worker	<td>20</td>
663*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
664*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
665*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
666*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
667*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
668*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
669*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
670*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
671*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
672*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
673*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
674*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
675*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
676*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
677*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
678*324bb76bSAndroid Build Coastguard Worker	<td>#11 - 2, 2, 1</td>
679*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
680*324bb76bSAndroid Build Coastguard Worker</tr>
681*324bb76bSAndroid Build Coastguard Worker
682*324bb76bSAndroid Build Coastguard Worker<tr>
683*324bb76bSAndroid Build Coastguard Worker	<td>21</td>
684*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
685*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
686*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
687*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
688*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
689*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
690*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
691*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
692*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
693*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
694*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
695*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>
696*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
697*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
698*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
699*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
700*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
701*324bb76bSAndroid Build Coastguard Worker</tr>
702*324bb76bSAndroid Build Coastguard Worker
703*324bb76bSAndroid Build Coastguard Worker<tr>
704*324bb76bSAndroid Build Coastguard Worker	<td>22</td>
705*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
706*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
707*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
708*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
709*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
710*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
711*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
712*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
713*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
714*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
715*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
716*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
717*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
718*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
719*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
720*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
721*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
722*324bb76bSAndroid Build Coastguard Worker</tr>
723*324bb76bSAndroid Build Coastguard Worker
724*324bb76bSAndroid Build Coastguard Worker<tr>
725*324bb76bSAndroid Build Coastguard Worker	<td>23</td>
726*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
727*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
728*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
729*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
730*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
731*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
732*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
733*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
734*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
735*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
736*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
737*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
738*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
739*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>
740*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
741*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
742*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
743*324bb76bSAndroid Build Coastguard Worker</tr>
744*324bb76bSAndroid Build Coastguard Worker
745*324bb76bSAndroid Build Coastguard Worker<tr>
746*324bb76bSAndroid Build Coastguard Worker	<td>24</td>
747*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
748*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
749*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
750*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
751*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
752*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
753*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
754*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
755*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
756*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
757*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
758*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
759*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
760*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
761*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>...</td>
762*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
763*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
764*324bb76bSAndroid Build Coastguard Worker</tr>
765*324bb76bSAndroid Build Coastguard Worker
766*324bb76bSAndroid Build Coastguard Worker<tr>
767*324bb76bSAndroid Build Coastguard Worker	<td>25</td>
768*324bb76bSAndroid Build Coastguard Worker	<td>Read</td>
769*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
770*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
771*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
772*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
773*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
774*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
775*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
776*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
777*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
778*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span></span>
779*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span>
780*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
781*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
782*324bb76bSAndroid Build Coastguard Worker        <span class="current"><span class="index">1</span></span>...</td>
783*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
784*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9</td>
785*324bb76bSAndroid Build Coastguard Worker</tr>
786*324bb76bSAndroid Build Coastguard Worker
787*324bb76bSAndroid Build Coastguard Worker<tr>
788*324bb76bSAndroid Build Coastguard Worker	<td>26</td>
789*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
790*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed"><span class="index">1</span>
791*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
792*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
793*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
794*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
795*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
796*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
797*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
798*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
799*324bb76bSAndroid Build Coastguard Worker        <span class="index">2</span>
800*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
801*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span>
802*324bb76bSAndroid Build Coastguard Worker        <span class="index">1</span></span>
803*324bb76bSAndroid Build Coastguard Worker        <span class="buffer"><span class="index">1</span></span>...</td>
804*324bb76bSAndroid Build Coastguard Worker	<td>#12 - 1, 1, 1, 1</td>
805*324bb76bSAndroid Build Coastguard Worker	<td>#4 #1 #6 #6 #2 #9 #9 #7</td>
806*324bb76bSAndroid Build Coastguard Worker</tr>
807*324bb76bSAndroid Build Coastguard Worker</tbody>
808*324bb76bSAndroid Build Coastguard Worker</table>
809*324bb76bSAndroid Build Coastguard Worker
810*324bb76bSAndroid Build Coastguard Worker<p>I've included a few more steps to help you see the pattern. You
811*324bb76bSAndroid Build Coastguard Workerkeep going until you run out of indexes in the index stream. When
812*324bb76bSAndroid Build Coastguard Workerthere is nothing new to read, you simply write out the code for
813*324bb76bSAndroid Build Coastguard Workerwhatever values you may have in your index buffer.  Finally you should
814*324bb76bSAndroid Build Coastguard Workersend the end-of-information code to the code stream. In this example,
815*324bb76bSAndroid Build Coastguard Workerthat code is #5. (View the <a href="lzw_image_data_code_table.html">
816*324bb76bSAndroid Build Coastguard Workercomplete code table</a>.)</p>
817*324bb76bSAndroid Build Coastguard Worker
818*324bb76bSAndroid Build Coastguard Worker<p>As you can see we dynamically built many new codes for our code
819*324bb76bSAndroid Build Coastguard Workertable as we compressed the data. For large files this can turn into a
820*324bb76bSAndroid Build Coastguard Workerlarge number of codes. It turns out that the GIF format specifies a
821*324bb76bSAndroid Build Coastguard Workermaximum code of #4095 (this happens to be the largest 12-bit
822*324bb76bSAndroid Build Coastguard Workernumber). If you want to use a new code, you have to clear out all of
823*324bb76bSAndroid Build Coastguard Workeryour old codes. You do this by sending the clear code (which for our
824*324bb76bSAndroid Build Coastguard Workersample was the #4). This tells the decoder that you are reinitializing
825*324bb76bSAndroid Build Coastguard Workeryour code table and it should too. Then you start building your own
826*324bb76bSAndroid Build Coastguard Workercodes again starting just after the value for your end-of-information
827*324bb76bSAndroid Build Coastguard Workercode (in our sample, we would start again at #6).</p>
828*324bb76bSAndroid Build Coastguard Worker
829*324bb76bSAndroid Build Coastguard Worker<p>The final code stream would look like this:</p>
830*324bb76bSAndroid Build Coastguard Worker
831*324bb76bSAndroid Build Coastguard Worker<blockquote><p>#4 #1 #6 #6 #2 #9 #9 #7 #8 #10 #2 #12 #1 #14 #15 #6 #0 #21 #0 #10 #7 #22 #23
832*324bb76bSAndroid Build Coastguard Worker#18 #26 #7 #10 #29 #13 #24 #12 #18 #16 #36 #12 #5</p></blockquote>
833*324bb76bSAndroid Build Coastguard Worker
834*324bb76bSAndroid Build Coastguard Worker<p>This is only 36 codes versus the 100 that would be required without compression.</p>
835*324bb76bSAndroid Build Coastguard Worker
836*324bb76bSAndroid Build Coastguard Worker<h2><a name="lzw_decompression">LZW Decompression</a></h2>
837*324bb76bSAndroid Build Coastguard Worker
838*324bb76bSAndroid Build Coastguard Worker<p> At some point we will need to turn this code stream back into
839*324bb76bSAndroid Build Coastguard Workera picture. To do this, we only need to know the values in the stream
840*324bb76bSAndroid Build Coastguard Workerand the size of the color table that was used. That's it. You remember that
841*324bb76bSAndroid Build Coastguard Workerbig code table we built during compression? We actually have enough information
842*324bb76bSAndroid Build Coastguard Workerin the code stream itself to be able to rebuild it.</p>
843*324bb76bSAndroid Build Coastguard Worker
844*324bb76bSAndroid Build Coastguard Worker<p>Again, i'll list the algorithm and then we will walk though an example. Let
845*324bb76bSAndroid Build Coastguard Workerme define a few terms i will be using. CODE will be current code we're working
846*324bb76bSAndroid Build Coastguard Workerwith. CODE-1 will be the code just before CODE in the code stream. {CODE}
847*324bb76bSAndroid Build Coastguard Workerwill be the value for CODE in the code table. For example, using the code
848*324bb76bSAndroid Build Coastguard Workertable we created during compression, if CODE=#7 then {CODE}=1,1,1.
849*324bb76bSAndroid Build Coastguard WorkerIn the same way, {CODE-1} would be the value in the code table for the
850*324bb76bSAndroid Build Coastguard Workercode that came before CODE. Looking at step 26 from the compression,
851*324bb76bSAndroid Build Coastguard Workerif CODE=#7, then {CODE-1} would be {#9}, not {#6}, which was 2,2.</p>
852*324bb76bSAndroid Build Coastguard Worker
853*324bb76bSAndroid Build Coastguard Worker<ul>
854*324bb76bSAndroid Build Coastguard Worker<li>Initialize code table</li>
855*324bb76bSAndroid Build Coastguard Worker<li>let CODE be the first code in the code stream</li>
856*324bb76bSAndroid Build Coastguard Worker<li>output {CODE} to index stream</li>
857*324bb76bSAndroid Build Coastguard Worker<li>&lt;LOOP POINT&gt;</li>
858*324bb76bSAndroid Build Coastguard Worker<li>let CODE be the next code in the code stream</li>
859*324bb76bSAndroid Build Coastguard Worker<li>is CODE in the code table?</li>
860*324bb76bSAndroid Build Coastguard Worker<li>Yes:
861*324bb76bSAndroid Build Coastguard Worker	<ul>
862*324bb76bSAndroid Build Coastguard Worker	<li>output {CODE} to index stream</li>
863*324bb76bSAndroid Build Coastguard Worker	<li>let K be the first index in {CODE}</li>
864*324bb76bSAndroid Build Coastguard Worker	<li>add {CODE-1}+K to the code table</li>
865*324bb76bSAndroid Build Coastguard Worker	</ul>
866*324bb76bSAndroid Build Coastguard Worker</li>
867*324bb76bSAndroid Build Coastguard Worker<li>No:
868*324bb76bSAndroid Build Coastguard Worker	<ul>
869*324bb76bSAndroid Build Coastguard Worker	<li>let K be the first index of {CODE-1}</li>
870*324bb76bSAndroid Build Coastguard Worker	<li>output {CODE-1}+K to index stream</li>
871*324bb76bSAndroid Build Coastguard Worker	<li>add {CODE-1}+K to code table</li>
872*324bb76bSAndroid Build Coastguard Worker	</ul>
873*324bb76bSAndroid Build Coastguard Worker</li>
874*324bb76bSAndroid Build Coastguard Worker<li>return to LOOP POINT</li>
875*324bb76bSAndroid Build Coastguard Worker</ul>
876*324bb76bSAndroid Build Coastguard Worker
877*324bb76bSAndroid Build Coastguard Worker<p>Let's start reading though the code stream we've created to show how to
878*324bb76bSAndroid Build Coastguard Workerturn it back into a list of color indexes.  The first value in the code
879*324bb76bSAndroid Build Coastguard Workerstream should be a clear code. This means we should initialize our code
880*324bb76bSAndroid Build Coastguard Workertable. To do this we must know how many colors  are in our color table.
881*324bb76bSAndroid Build Coastguard Worker(This information comes from the first byte in the image data block in
882*324bb76bSAndroid Build Coastguard Workerthe file. More on this later.) Again we will set up codes #0-#3 to be each
883*324bb76bSAndroid Build Coastguard Workerof the four colors and add in the clear code (#4)
884*324bb76bSAndroid Build Coastguard Workerand end of information code (#5).</p>
885*324bb76bSAndroid Build Coastguard Worker
886*324bb76bSAndroid Build Coastguard Worker<p>The next step is to read the first color code. In the following table you
887*324bb76bSAndroid Build Coastguard Workerwill see the values of CODE highlighted in purple, and the values for
888*324bb76bSAndroid Build Coastguard WorkerCODE-1 highlighted in green. Our first CODE value is #1. We then output
889*324bb76bSAndroid Build Coastguard Worker{#1}, or simply 1,  to the index stream [Step 0].</p>
890*324bb76bSAndroid Build Coastguard Worker
891*324bb76bSAndroid Build Coastguard Worker<p>Now we enter the main loop of the algorithm. The next code gets assigned
892*324bb76bSAndroid Build Coastguard Workerto CODE which now makes that value #6. Next we check to see if this value
893*324bb76bSAndroid Build Coastguard Workeris in our code table. At this time, it is not. This means we must find the
894*324bb76bSAndroid Build Coastguard Workerfirst index in the value of {CODE-1} and call this K. Thus K = first index of
895*324bb76bSAndroid Build Coastguard Worker{CODE-1} = first index of {#1} = 1. Now we output {CODE-1} + K to the index
896*324bb76bSAndroid Build Coastguard Workerstream and add this value to our code table. The means we output 1,1 and
897*324bb76bSAndroid Build Coastguard Workergive this value a code of #6 [Step 1].</p>
898*324bb76bSAndroid Build Coastguard Worker
899*324bb76bSAndroid Build Coastguard Worker<table class="alg_steps" cellspacing="0">
900*324bb76bSAndroid Build Coastguard Worker<tr>
901*324bb76bSAndroid Build Coastguard Worker	<th>Step</th>
902*324bb76bSAndroid Build Coastguard Worker	<th>Action</th>
903*324bb76bSAndroid Build Coastguard Worker	<th>Code Stream</th>
904*324bb76bSAndroid Build Coastguard Worker	<th>New Code Table Row</th>
905*324bb76bSAndroid Build Coastguard Worker	<th>Index Stream</th>
906*324bb76bSAndroid Build Coastguard Worker</tr>
907*324bb76bSAndroid Build Coastguard Worker<tr>
908*324bb76bSAndroid Build Coastguard Worker	<td>0</td>
909*324bb76bSAndroid Build Coastguard Worker	<td>Init</td>
910*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4</span> <span class="current">#1</span> #6 #6 #2 #9 #9 #7 ...</td>
911*324bb76bSAndroid Build Coastguard Worker	<td>&nbsp;</td>
912*324bb76bSAndroid Build Coastguard Worker	<td>1</td>
913*324bb76bSAndroid Build Coastguard Worker</tr>
914*324bb76bSAndroid Build Coastguard Worker<tr>
915*324bb76bSAndroid Build Coastguard Worker	<td>1</td>
916*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
917*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4</span> <span class="buffer">#1</span> <span class="current">#6</span> #6 #2 #9 #9 #7 ...</td>
918*324bb76bSAndroid Build Coastguard Worker	<td>#6 - 1, 1</td>
919*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1</td>
920*324bb76bSAndroid Build Coastguard Worker</tr>
921*324bb76bSAndroid Build Coastguard Worker<tr>
922*324bb76bSAndroid Build Coastguard Worker	<td>2</td>
923*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
924*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4 #1</span> <span class="buffer">#6</span> <span class="current">#6</span> #2 #9 #9 #7 ...</td>
925*324bb76bSAndroid Build Coastguard Worker	<td>#7 - 1, 1, 1</td>
926*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1, 1, 1</td>
927*324bb76bSAndroid Build Coastguard Worker</tr>
928*324bb76bSAndroid Build Coastguard Worker<tr>
929*324bb76bSAndroid Build Coastguard Worker	<td>3</td>
930*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
931*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4 #1 #6</span> <span class="buffer">#6</span> <span class="current">#2</span> #9 #9 #7 ...</td>
932*324bb76bSAndroid Build Coastguard Worker	<td>#8 - 1, 1, 2</td>
933*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1, 1, 1, 2</td>
934*324bb76bSAndroid Build Coastguard Worker</tr>
935*324bb76bSAndroid Build Coastguard Worker<tr>
936*324bb76bSAndroid Build Coastguard Worker	<td>4</td>
937*324bb76bSAndroid Build Coastguard Worker	<td>Not Found</td>
938*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4 #1 #6 #6</span> <span class="buffer">#2</span> <span class="current">#9</span> #9 #7 ...</td>
939*324bb76bSAndroid Build Coastguard Worker	<td>#9 - 2, 2</td>
940*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1, 1, 1, 2, 2, 2</td>
941*324bb76bSAndroid Build Coastguard Worker</tr>
942*324bb76bSAndroid Build Coastguard Worker<tr>
943*324bb76bSAndroid Build Coastguard Worker	<td>5</td>
944*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
945*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4 #1 #6 #6 #2</span> <span class="buffer">#9</span> <span class="current">#9</span> #7 ...</td>
946*324bb76bSAndroid Build Coastguard Worker	<td>#10 - 2, 2, 2</td>
947*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1, 1, 1, 2, 2, 2, 2, 2</td>
948*324bb76bSAndroid Build Coastguard Worker</tr>
949*324bb76bSAndroid Build Coastguard Worker<tr>
950*324bb76bSAndroid Build Coastguard Worker	<td>6</td>
951*324bb76bSAndroid Build Coastguard Worker	<td>Found</td>
952*324bb76bSAndroid Build Coastguard Worker	<td><span class="processed">#4 #1 #6 #6 #2 #9</span> <span class="buffer">#9</span> <span class="current">#7</span> ...</td>
953*324bb76bSAndroid Build Coastguard Worker	<td>#11 - 2, 2, 1</td>
954*324bb76bSAndroid Build Coastguard Worker	<td>1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1</td>
955*324bb76bSAndroid Build Coastguard Worker</tr>
956*324bb76bSAndroid Build Coastguard Worker</table>
957*324bb76bSAndroid Build Coastguard Worker
958*324bb76bSAndroid Build Coastguard Worker<p>We start the loop again by reading the next code. CODE now would be
959*324bb76bSAndroid Build Coastguard Worker#6 and this time we do have a record for this code in our code
960*324bb76bSAndroid Build Coastguard Workertable. Thus we dump {#6} to the index stream which would be 1,1.
961*324bb76bSAndroid Build Coastguard WorkerNow we take the first index in {#6} and call that K. Here, {#6} has
962*324bb76bSAndroid Build Coastguard Workertwo indexes, the first of which is 1; thus K = 1. Before moving
963*324bb76bSAndroid Build Coastguard Workeron, we add {CODE-1}+K to the code table. This #7 is now 1, 1, 1 [Step 2].</p>
964*324bb76bSAndroid Build Coastguard Worker
965*324bb76bSAndroid Build Coastguard Worker<p>I've included a few more steps so you can see the algorithm in action. While
966*324bb76bSAndroid Build Coastguard Workerthe explanation may sound complicated, you can see it's actually quite simple.
967*324bb76bSAndroid Build Coastguard WorkerYou'll also notice that you end up building the exact same
968*324bb76bSAndroid Build Coastguard Worker<a href="lzw_image_data_code_table.html">code table</a>
969*324bb76bSAndroid Build Coastguard Workeras the one that was created during compression. This is the reason that
970*324bb76bSAndroid Build Coastguard WorkerLZW is so great; we can just share the codes and not the table.</p>
971*324bb76bSAndroid Build Coastguard Worker
972*324bb76bSAndroid Build Coastguard Worker<h2><a name="lzw_bytes">Saving the Code Stream as Bytes</a></h2>
973*324bb76bSAndroid Build Coastguard Worker
974*324bb76bSAndroid Build Coastguard Worker<p>I've shown you how to go back and forth between index and code stream, but
975*324bb76bSAndroid Build Coastguard Workerhaven't told you what to do with them. The index stream is used to specify the
976*324bb76bSAndroid Build Coastguard Workercolor of each of the pixel of your image and really only shows up on screen.
977*324bb76bSAndroid Build Coastguard WorkerIt is the code stream that is actually saved in the GIF files on your computer
978*324bb76bSAndroid Build Coastguard Workeror transmitted over the internet. In order to save these code streams, we must
979*324bb76bSAndroid Build Coastguard Workerturn them into bytes. The first thought might be to store each of the codes
980*324bb76bSAndroid Build Coastguard Workeras its own byte; however this would limit the max code to just #255 and
981*324bb76bSAndroid Build Coastguard Workerresult in a lot of wasted bits for the small codes. To solve these problems,
982*324bb76bSAndroid Build Coastguard Workerthe GIF file format actually uses flexible <em>code sizes</em>.</p>
983*324bb76bSAndroid Build Coastguard Worker
984*324bb76bSAndroid Build Coastguard Worker<p>Flexible code sizes allow for further compression by limiting the bits
985*324bb76bSAndroid Build Coastguard Workerneeded to save the code stream as bytes. The <em>code size</em> is the number
986*324bb76bSAndroid Build Coastguard Workerof bits it takes to store the value of the code. When we talk about bits,
987*324bb76bSAndroid Build Coastguard Workerwe're referring to the 1's and 0's that make up a byte. The codes are
988*324bb76bSAndroid Build Coastguard Workerconverted to their binary values to come up with the bits. To specify
989*324bb76bSAndroid Build Coastguard Workerthe code for #4, you would look at this binary equivalent, which is 100,
990*324bb76bSAndroid Build Coastguard Workerand see that you would need three bits to store this value. The largest code
991*324bb76bSAndroid Build Coastguard Workervalue in our sample code stream is #36 (binary: 100100) which would
992*324bb76bSAndroid Build Coastguard Workertake 6 bits to encode. Note that the number of bits i've just given is
993*324bb76bSAndroid Build Coastguard Workerthe minimum number. You can make the number take up more bits by adding
994*324bb76bSAndroid Build Coastguard Workerzeros to the front.</p>
995*324bb76bSAndroid Build Coastguard Worker
996*324bb76bSAndroid Build Coastguard Worker<p style="text-align:center"><img src="image_data_block.gif" alt="GIF image data block layout" style="border: 1px solid black" /></p>
997*324bb76bSAndroid Build Coastguard Worker
998*324bb76bSAndroid Build Coastguard Worker<p>We need a way to know what size each of the codes are. Recall that the
999*324bb76bSAndroid Build Coastguard Workerimage data block begins with a single byte value called the
1000*324bb76bSAndroid Build Coastguard Worker<em>LZW minimum code size</em>. The GIF format allows sizes as small
1001*324bb76bSAndroid Build Coastguard Workeras 2 bits and as large as 12 bits. This minimum code size value is typically
1002*324bb76bSAndroid Build Coastguard Workerthe number of bits/pixel of the image. So if you have 32 colors in your image,
1003*324bb76bSAndroid Build Coastguard Workeryou will need 5 bits/pixel (for numbers 0-31 because 31 in binary is 11111).
1004*324bb76bSAndroid Build Coastguard WorkerThus, this will most likely be one more than the bit value for the size of the
1005*324bb76bSAndroid Build Coastguard Workercolor table you are using. (Even if you only have two colors, the minimum
1006*324bb76bSAndroid Build Coastguard Workercode size most be at least 2.) Refer to the <a href="#color_table_size">
1007*324bb76bSAndroid Build Coastguard Workercode table above</a> to remind yourself how that works.</p>
1008*324bb76bSAndroid Build Coastguard Worker
1009*324bb76bSAndroid Build Coastguard Worker<p>Here's the funny thing: the value for minimum code size isn't
1010*324bb76bSAndroid Build Coastguard Workeractually the smallest code size that's used in the encoding
1011*324bb76bSAndroid Build Coastguard Workerprocess. Because the minimum code size tells you how many bits are
1012*324bb76bSAndroid Build Coastguard Workerneeded just for the different colors of the image, you still have to
1013*324bb76bSAndroid Build Coastguard Workeraccount for the two special codes that we always add to the code
1014*324bb76bSAndroid Build Coastguard Workertable. Therefore the actual smallest code size that will be used is
1015*324bb76bSAndroid Build Coastguard Workerone more than the value specified in the &quot;minimum&quot; code size
1016*324bb76bSAndroid Build Coastguard Workerbyte. I'll call this new value the <em>first code size</em>.</p>
1017*324bb76bSAndroid Build Coastguard Worker
1018*324bb76bSAndroid Build Coastguard Worker<p>We now know how many bytes the first code will be. This size will probably
1019*324bb76bSAndroid Build Coastguard Workerwork for the next few codes as well, but recall that the GIF format
1020*324bb76bSAndroid Build Coastguard Workerallows for flexible code sizes. As larger code values get added to your
1021*324bb76bSAndroid Build Coastguard Workercode table, you will soon realize that you need larger code sizes if you
1022*324bb76bSAndroid Build Coastguard Workerwere to output those values. When you are encoding the data, you increase
1023*324bb76bSAndroid Build Coastguard Workeryour code size as soon as your write out the code equal to
1024*324bb76bSAndroid Build Coastguard Worker2^(current code size)-1. If you are decoding from codes to indexes,
1025*324bb76bSAndroid Build Coastguard Workeryou need to increase your code size as soon as you add the code value that
1026*324bb76bSAndroid Build Coastguard Workeris equal to 2^(current code size)-1 to your code table. That is, the next
1027*324bb76bSAndroid Build Coastguard Workertime you grab the next section of bits, you grab one more.</p>
1028*324bb76bSAndroid Build Coastguard Worker
1029*324bb76bSAndroid Build Coastguard Worker<p>Note that the largest code size allowed is 12 bits. If you get to this
1030*324bb76bSAndroid Build Coastguard Workerlimit, the next code you encounter should be the <em>clear code</em> which
1031*324bb76bSAndroid Build Coastguard Workerwould tell you to reinitialize the code table. You then go back to using
1032*324bb76bSAndroid Build Coastguard Workerthe first code size and grow again when necessary.</p>
1033*324bb76bSAndroid Build Coastguard Worker
1034*324bb76bSAndroid Build Coastguard Worker<p>Jumping back to our sample image, we see that we have a minimum code
1035*324bb76bSAndroid Build Coastguard Workersize value of 2 which means out first code size will be 3 bits long.
1036*324bb76bSAndroid Build Coastguard WorkerOut first three codes, #1 #6 and #6, would be coded as 001 110 and 110.
1037*324bb76bSAndroid Build Coastguard WorkerIf you see at Step 6 of the encoding, we added a code of #7 to our code
1038*324bb76bSAndroid Build Coastguard Workertable. This is our clue to increase our code size because 7 is equal to
1039*324bb76bSAndroid Build Coastguard Worker2^3-1 (where 3 is our current code size). Thus, the next code we
1040*324bb76bSAndroid Build Coastguard Workerwrite out, #2, will use the new code size of 4 and therefore look
1041*324bb76bSAndroid Build Coastguard Workerlike 0010. In the decoding process, we again would increase our code
1042*324bb76bSAndroid Build Coastguard Workersize when we read the code for #7 and would read the next 4, rather than
1043*324bb76bSAndroid Build Coastguard Workerthe next 3 bits, to get the next code. In the sample table above this
1044*324bb76bSAndroid Build Coastguard Workeroccurs in Step 2.</p>
1045*324bb76bSAndroid Build Coastguard Worker
1046*324bb76bSAndroid Build Coastguard Worker<p>Finally we must turn all these bit values into bytes. The lowest bit of the
1047*324bb76bSAndroid Build Coastguard Workercode bit value gets placed in the lowest available bit of the byte. After
1048*324bb76bSAndroid Build Coastguard Workeryou've filled up the 8 bits in the byte, you take any left over bits and
1049*324bb76bSAndroid Build Coastguard Workerstart a new byte. Take a look at the following illustration to see
1050*324bb76bSAndroid Build Coastguard Workerhow that works with the codes from our sample image.</p>
1051*324bb76bSAndroid Build Coastguard Worker
1052*324bb76bSAndroid Build Coastguard Worker<p style="text-align:center"><img src="lzw_encoding_codes.gif"
1053*324bb76bSAndroid Build Coastguard Workeralt="Encoding LZW Codes" style="border: 1px solid black" / WIDTH="500"
1054*324bb76bSAndroid Build Coastguard WorkerHEIGHT="220"></p>
1055*324bb76bSAndroid Build Coastguard Worker
1056*324bb76bSAndroid Build Coastguard Worker<p>You can see in the first byte that was returned (<span
1057*324bb76bSAndroid Build Coastguard Workerclass="byte">8C</span>) that the lowest three bits (because that was
1058*324bb76bSAndroid Build Coastguard Workerour first code size) contain 010 which is the binary value of 6 so
1059*324bb76bSAndroid Build Coastguard Workerthat would be the clear code we started with, #4. In the three bits to
1060*324bb76bSAndroid Build Coastguard Workerthe left, you see 001 which out or first data code of #1. You can also
1061*324bb76bSAndroid Build Coastguard Workersee when we switched into code sizes of 4 bits in the second byte
1062*324bb76bSAndroid Build Coastguard Worker(<span class="byte">2D</span>).</p>
1063*324bb76bSAndroid Build Coastguard Worker
1064*324bb76bSAndroid Build Coastguard Worker<p>When you run out of codes but have filled less than 8 bits of the
1065*324bb76bSAndroid Build Coastguard Workerbyte, you should just fill the remaining bits with zeros. Recall that
1066*324bb76bSAndroid Build Coastguard Workerthe image data must be broken up onto <a
1067*324bb76bSAndroid Build Coastguard Workerhref="bits_and_bytes.html#image_data_block">data sub-blocks</a>.  Each
1068*324bb76bSAndroid Build Coastguard Workerof the data sub-blocks begins with a byte that specifies how many
1069*324bb76bSAndroid Build Coastguard Workerbytes of data. The value will be between 1 and 255. After you read
1070*324bb76bSAndroid Build Coastguard Workerthose bytes, the next byte indicates again how many bytes of data
1071*324bb76bSAndroid Build Coastguard Workerfollow. You stop when you encounter a subblock that has a lenght of
1072*324bb76bSAndroid Build Coastguard Workerzero. That tells you when you've reached the end of the image data. In
1073*324bb76bSAndroid Build Coastguard Workerour sample the image the byte just after the LZW code size is <span
1074*324bb76bSAndroid Build Coastguard Workerclass="byte">16</span> which indicates that 22 bytes of data
1075*324bb76bSAndroid Build Coastguard Workerfollow. After we reach those, we see the next byte is <span
1076*324bb76bSAndroid Build Coastguard Workerclass="byte">00</span> which means we are all done.</p>
1077*324bb76bSAndroid Build Coastguard Worker
1078*324bb76bSAndroid Build Coastguard Worker<p>Return codes from bytes the basically just the same process in
1079*324bb76bSAndroid Build Coastguard Workerreverse.  A sample illustration of the process follows which shows how
1080*324bb76bSAndroid Build Coastguard Workeryou would extract codes if the first code size were 5 bits.</p>
1081*324bb76bSAndroid Build Coastguard Worker
1082*324bb76bSAndroid Build Coastguard Worker<p style="text-align:center"><img src="lzw_decoding_bytes.gif" alt="Decoding LZW Bytes" style="border: 1px solid black" / WIDTH="500" HEIGHT="220"></p>
1083*324bb76bSAndroid Build Coastguard Worker
1084*324bb76bSAndroid Build Coastguard Worker<h2>Next: Animation and Transparency</h2>
1085*324bb76bSAndroid Build Coastguard Worker
1086*324bb76bSAndroid Build Coastguard Worker<p>That is pretty much everything you need to know to read or generate
1087*324bb76bSAndroid Build Coastguard Workera basic image file. One of the reasons the GIF becames such a popular
1088*324bb76bSAndroid Build Coastguard Workerformat was because it also allowed for &quot;fancier&quot; features. These
1089*324bb76bSAndroid Build Coastguard Workerfeatures include animation and transparency. Next we'll look
1090*324bb76bSAndroid Build Coastguard Workerat how those work.</p>
1091*324bb76bSAndroid Build Coastguard Worker
1092*324bb76bSAndroid Build Coastguard Worker<p><a href="animation_and_transparency.html">Continue...</a></p>
1093*324bb76bSAndroid Build Coastguard Worker</div>
1094*324bb76bSAndroid Build Coastguard Worker
1095*324bb76bSAndroid Build Coastguard Worker<div style="text-align:center; margin-top: 10px; padding-top: 10px; border-top: #cecece 1px solid">
1096*324bb76bSAndroid Build Coastguard Worker<a href="../index.html">Back to GIFLIB documentation</a>
1097*324bb76bSAndroid Build Coastguard Worker</div>
1098*324bb76bSAndroid Build Coastguard Worker
1099*324bb76bSAndroid Build Coastguard Worker</body>
1100*324bb76bSAndroid Build Coastguard Worker
1101*324bb76bSAndroid Build Coastguard Worker</html>
1102