Sterowanie grafiką ($F9)
Ten krótki blok stoi przed obrazem i mówi, jak go pokazać: który kolor ma być przezroczysty, ile czekać przed następną klatką i co zrobić z obrazem, zanim pojawi się kolejny. Bez niego nie byłoby animowanych GIF-ów ani przezroczystości.
Budowa
| Bajty | Pole |
|---|---|
| 0-1 | 21 F9 |
| 2 | długość bloku: zawsze 04 |
| 3 | flagi |
| 4-5 | opóźnienie w setnych częściach sekundy (little-endian) |
| 6 | indeks koloru przezroczystego |
| 7 | terminator 00 |
Bajt flag
| Usuwanie | Znaczenie |
|---|---|
| 0 | nie określono, dekoder robi to samo co przy 1 |
| 1 | zostaw obraz, następna klatka rysuje się na nim |
| 2 | przywróć tło: wyczyść prostokąt klatki |
| 3 | przywróć to, co było przed narysowaniem klatki |
Sposób 1 pozwala w kolejnych klatkach zapisywać tylko zmiany. Sposób 2 jest potrzebny, gdy przezroczysty obiekt porusza się po tle. Sposób 3 jest najrzadziej używany i najtrudniejszy dla dekodera, bo wymaga zapamiętania fragmentu ekranu.
Przykłady
Gdyby w przykładowym pliku zamienić blok na drugą wersję, białe piksele stałyby się przezroczyste.
Opóźnienie w praktyce
Opóźnienie liczy się w setnych sekundy, więc najkrótsze możliwe to 0,01 s. Przeglądarki traktują jednak bardzo małe wartości (0 i 1, czyli 0-0,01 s) jak 0,1 s, żeby stare GIF-y z zerowym opóźnieniem nie migały zbyt szybko. Płynna animacja w GIF to w praktyce 2-6 setnych na klatkę, czyli około 17-50 klatek na sekundę.
Blok dotyczy tylko jednego, najbliższego następnego obrazu (albo tekstu graficznego). Każda klatka animacji ma własny blok $F9 (zob. kolejność bloków).