gif

Unnamed repository
Log | Files | Refs | README

commit 3169705275b7666e266acd81b53dd76d7d93fa4b
Author: phoebos <ben@bvnf.space>
Date:   Tue, 24 Aug 2021 21:18:29 +0100

initial

Diffstat:
AREADME | 7+++++++
Agif.c | 45+++++++++++++++++++++++++++++++++++++++++++++
Agif87a.txt | 1052+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ahd | 36++++++++++++++++++++++++++++++++++++
Ahd-annotated | 38++++++++++++++++++++++++++++++++++++++
5 files changed, 1178 insertions(+), 0 deletions(-)

diff --git a/README b/README @@ -0,0 +1,7 @@ +Write the contents of a binary file bin as hex bytes to txt: + + $ hexdump -e '16/1 "%02x ""\n"' bin > txt + +Edit the bytes in the file, then convert txt to a modified binary: + + $ for i in $(cat txt); do printf "\x$i"; done > bin.mod diff --git a/gif.c b/gif.c @@ -0,0 +1,45 @@ +/* Copyright 2021 (c) phoebos + * + * This program reads a gif from stdin or a supplied filename + * and prints the {global,local} color table then the bitmap + * where each pixel is a number corresponding to the index of the color. + */ + +#include <fcntl.h> +#include <stdio.h> +#include <strings.h> +#include <unistd.h> + +#define BUF_SIZE 10 +#define FAIL_SYS 1 +#define FAIL_GIF 2 + +int +main(int argc, char **argv){ + int fd; + ++argv; + do { + fd = 0; + if (*argv && **argv != '-') { + fd = open(*argv, O_RDONLY); + if (fd == -1) { + perror("open"); + return FAIL_SYS; + } + } + char buf[BUF_SIZE]; + fprintf(stderr, "reading from %s\n", *argv); + ssize_t bytes = read(fd, buf, BUF_SIZE); + if (bytes < 0) { + perror("read"); + return FAIL_SYS; + } + if (close(fd) != 0) { + perror("close"); + return FAIL_SYS; + } + buf[bytes] = '\0'; + printf("%s\n", buf); + } while (*++argv); + return 0; +} diff --git a/gif87a.txt b/gif87a.txt @@ -0,0 +1,1051 @@ + + + + G I F (tm) + + Graphics Interchange Format (tm) + + A standard defining a mechanism + + for the storage and transmission + + of raster-based graphics information + + June 15, 1987 + + (c) CompuServe Incorporated, 1987 + + All rights reserved + + While this document is copyrighted, the information + + contained within is made available for use in computer + + software without royalties, or licensing restrictions. + + GIF and 'Graphics Interchange Format' are trademarks of + + CompuServe, Incorporated. + + an H&R Block Company + + 5000 Arlington Centre Blvd. + + Columbus, Ohio 43220 + + (614) 457-8600 + + Page 2 + + Graphics Interchange Format (GIF) Specification + + Table of Contents + + INTRODUCTION . . . . . . . . . . . . . . . . . page 3 + + GENERAL FILE FORMAT . . . . . . . . . . . . . page 3 + + GIF SIGNATURE . . . . . . . . . . . . . . . . page 4 + + SCREEN DESCRIPTOR . . . . . . . . . . . . . . page 4 + + GLOBAL COLOR MAP . . . . . . . . . . . . . . . page 5 + + IMAGE DESCRIPTOR . . . . . . . . . . . . . . . page 6 + + LOCAL COLOR MAP . . . . . . . . . . . . . . . page 7 + + RASTER DATA . . . . . . . . . . . . . . . . . page 7 + + GIF TERMINATOR . . . . . . . . . . . . . . . . page 8 + + GIF EXTENSION BLOCKS . . . . . . . . . . . . . page 8 + + APPENDIX A - GLOSSARY . . . . . . . . . . . . page 9 + + APPENDIX B - INTERACTIVE SEQUENCES . . . . . . page 10 + + APPENDIX C - IMAGE PACKAGING & COMPRESSION . . page 12 + + APPENDIX D - MULTIPLE IMAGE PROCESSING . . . . page 15 + + Graphics Interchange Format (GIF) Page 3 + +Specification + +INTRODUCTION + + 'GIF' (tm) is CompuServe's standard for defining generalized color + + raster images. This 'Graphics Interchange Format' (tm) allows + + high-quality, high-resolution graphics to be displayed on a variety of + + graphics hardware and is intended as an exchange and display mechanism + + for graphics images. The image format described in this document is + + designed to support current and future image technology and will in + + addition serve as a basis for future CompuServe graphics products. + + The main focus of this document is to provide the technical + + information necessary for a programmer to implement GIF encoders and + + decoders. As such, some assumptions are made as to terminology relavent + + to graphics and programming in general. + + The first section of this document describes the GIF data format + + and its components and applies to all GIF decoders, either as standalone + + programs or as part of a communications package. Appendix B is a + + section relavent to decoders that are part of a communications software + + package and describes the protocol requirements for entering and exiting + + GIF mode, and responding to host interrogations. A glossary in Appendix + + A defines some of the terminology used in this document. Appendix C + + gives a detailed explanation of how the graphics image itself is + + packaged as a series of data bytes. + + Graphics Interchange Format Data Definition + + GENERAL FILE FORMAT + + +-----------------------+ + + | +-------------------+ | + + | | GIF Signature | | + + | +-------------------+ | + + | +-------------------+ | + + | | Screen Descriptor | | + + | +-------------------+ | + + | +-------------------+ | + + | | Global Color Map | | + + | +-------------------+ | + + . . . . . . + + | +-------------------+ | ---+ + + | | Image Descriptor | | | + + | +-------------------+ | | + + | +-------------------+ | | + + | | Local Color Map | | |- Repeated 1 to n times + + | +-------------------+ | | + + | +-------------------+ | | + + | | Raster Data | | | + + | +-------------------+ | ---+ + + . . . . . . + + |- GIF Terminator -| + + +-----------------------+ + + Graphics Interchange Format (GIF) Page 4 + +Specification + + GIF SIGNATURE + + The following GIF Signature identifies the data following as a + + valid GIF image stream. It consists of the following six characters: + + G I F 8 7 a + + The last three characters '87a' may be viewed as a version number + + for this particular GIF definition and will be used in general as a + + reference in documents regarding GIF that address any version + + dependencies. + + SCREEN DESCRIPTOR + + The Screen Descriptor describes the overall parameters for all GIF + + images following. It defines the overall dimensions of the image space + + or logical screen required, the existance of color mapping information, + + background screen color, and color depth information. This information + + is stored in a series of 8-bit bytes as described below. + + bits + + 7 6 5 4 3 2 1 0 Byte # + + +---------------+ + + | | 1 + + +-Screen Width -+ Raster width in pixels (LSB first) + + | | 2 + + +---------------+ + + | | 3 + + +-Screen Height-+ Raster height in pixels (LSB first) + + | | 4 + + +-+-----+-+-----+ M = 1, Global color map follows Descriptor + + |M| cr |0|pixel| 5 cr+1 = # bits of color resolution + + +-+-----+-+-----+ pixel+1 = # bits/pixel in image + + | background | 6 background=Color index of screen background + + +---------------+ (color is defined from the Global color + + |0 0 0 0 0 0 0 0| 7 map or default map if none specified) + + +---------------+ + + The logical screen width and height can both be larger than the + + physical display. How images larger than the physical display are + + handled is implementation dependent and can take advantage of hardware + + characteristics (e.g. Macintosh scrolling windows). Otherwise images + + can be clipped to the edges of the display. + + The value of 'pixel' also defines the maximum number of colors + + within an image. The range of values for 'pixel' is 0 to 7 which + + represents 1 to 8 bits. This translates to a range of 2 (B & W) to 256 + + colors. Bit 3 of word 5 is reserved for future definition and must be + + zero. + + Graphics Interchange Format (GIF) Page 5 + +Specification + + GLOBAL COLOR MAP + + The Global Color Map is optional but recommended for images where + + accurate color rendition is desired. The existence of this color map is + + indicated in the 'M' field of byte 5 of the Screen Descriptor. A color + + map can also be associated with each image in a GIF file as described + + later. However this global map will normally be used because of + + hardware restrictions in equipment available today. In the individual + + Image Descriptors the 'M' flag will normally be zero. If the Global + + Color Map is present, it's definition immediately follows the Screen + + Descriptor. The number of color map entries following a Screen + + Descriptor is equal to 2**(# bits per pixel), where each entry consists + + of three byte values representing the relative intensities of red, green + + and blue respectively. The structure of the Color Map block is: + + bits + + 7 6 5 4 3 2 1 0 Byte # + + +---------------+ + + | red intensity | 1 Red value for color index 0 + + +---------------+ + + |green intensity| 2 Green value for color index 0 + + +---------------+ + + | blue intensity| 3 Blue value for color index 0 + + +---------------+ + + | red intensity | 4 Red value for color index 1 + + +---------------+ + + |green intensity| 5 Green value for color index 1 + + +---------------+ + + | blue intensity| 6 Blue value for color index 1 + + +---------------+ + + : : (Continues for remaining colors) + + Each image pixel value received will be displayed according to its + + closest match with an available color of the display based on this color + + map. The color components represent a fractional intensity value from + + none (0) to full (255). White would be represented as (255,255,255), + + black as (0,0,0) and medium yellow as (180,180,0). For display, if the + + device supports fewer than 8 bits per color component, the higher order + + bits of each component are used. In the creation of a GIF color map + + entry with hardware supporting fewer than 8 bits per component, the + + component values for the hardware should be converted to the 8-bit + + format with the following calculation: + + <map_value> = <component_value>*255/(2**<nbits> -1) + + This assures accurate translation of colors for all displays. In + + the cases of creating GIF images from hardware without color palette + + capability, a fixed palette should be created based on the available + + display colors for that hardware. If no Global Color Map is indicated, + + a default color map is generated internally which maps each possible + + incoming color index to the same hardware color index modulo <n> where + + <n> is the number of available hardware colors. + + Graphics Interchange Format (GIF) Page 6 + +Specification + + IMAGE DESCRIPTOR + + The Image Descriptor defines the actual placement and extents of + + the following image within the space defined in the Screen Descriptor. + + Also defined are flags to indicate the presence of a local color lookup + + map, and to define the pixel display sequence. Each Image Descriptor is + + introduced by an image separator character. The role of the Image + + Separator is simply to provide a synchronization character to introduce + + an Image Descriptor. This is desirable if a GIF file happens to contain + + more than one image. This character is defined as 0x2C hex or ',' + + (comma). When this character is encountered between images, the Image + + Descriptor will follow immediately. + + Any characters encountered between the end of a previous image and + + the image separator character are to be ignored. This allows future GIF + + enhancements to be present in newer image formats and yet ignored safely + + by older software decoders. + + bits + + 7 6 5 4 3 2 1 0 Byte # + + +---------------+ + + |0 0 1 0 1 1 0 0| 1 ',' - Image separator character + + +---------------+ + + | | 2 Start of image in pixels from the + + +- Image Left -+ left side of the screen (LSB first) + + | | 3 + + +---------------+ + + | | 4 + + +- Image Top -+ Start of image in pixels from the + + | | 5 top of the screen (LSB first) + + +---------------+ + + | | 6 + + +- Image Width -+ Width of the image in pixels (LSB first) + + | | 7 + + +---------------+ + + | | 8 + + +- Image Height-+ Height of the image in pixels (LSB first) + + | | 9 + + +-+-+-+-+-+-----+ M=0 - Use global color map, ignore 'pixel' + + |M|I|0|0|0|pixel| 10 M=1 - Local color map follows, use 'pixel' + + +-+-+-+-+-+-----+ I=0 - Image formatted in Sequential order + + I=1 - Image formatted in Interlaced order + + pixel+1 - # bits per pixel for this image + + The specifications for the image position and size must be confined + + to the dimensions defined by the Screen Descriptor. On the other hand + + it is not necessary that the image fill the entire screen defined. + + LOCAL COLOR MAP + + Graphics Interchange Format (GIF) Page 7 + +Specification + + A Local Color Map is optional and defined here for future use. If + + the 'M' bit of byte 10 of the Image Descriptor is set, then a color map + + follows the Image Descriptor that applies only to the following image. + + At the end of the image, the color map will revert to that defined after + + the Screen Descriptor. Note that the 'pixel' field of byte 10 of the + + Image Descriptor is used only if a Local Color Map is indicated. This + + defines the parameters not only for the image pixel size, but determines + + the number of color map entries that follow. The bits per pixel value + + will also revert to the value specified in the Screen Descriptor when + + processing of the image is complete. + + RASTER DATA + + The format of the actual image is defined as the series of pixel + + color index values that make up the image. The pixels are stored left + + to right sequentially for an image row. By default each image row is + + written sequentially, top to bottom. In the case that the Interlace or + + 'I' bit is set in byte 10 of the Image Descriptor then the row order of + + the image display follows a four-pass process in which the image is + + filled in by widely spaced rows. The first pass writes every 8th row, + + starting with the top row of the image window. The second pass writes + + every 8th row starting at the fifth row from the top. The third pass + + writes every 4th row starting at the third row from the top. The fourth + + pass completes the image, writing every other row, starting at the + + second row from the top. A graphic description of this process follows: + + Image + + Row Pass 1 Pass 2 Pass 3 Pass 4 Result + + --------------------------------------------------- + + 0 **1a** **1a** + + 1 **4a** **4a** + + 2 **3a** **3a** + + 3 **4b** **4b** + + 4 **2a** **2a** + + 5 **4c** **4c** + + 6 **3b** **3b** + + 7 **4d** **4d** + + 8 **1b** **1b** + + 9 **4e** **4e** + + 10 **3c** **3c** + + 11 **4f** **4f** + + 12 **2b** **2b** + + . . . + + The image pixel values are processed as a series of color indices + + which map into the existing color map. The resulting color value from + + the map is what is actually displayed. This series of pixel indices, + + the number of which is equal to image-width*image-height pixels, are + + passed to the GIF image data stream one value per pixel, compressed and + + packaged according to a version of the LZW compression algorithm as + + defined in Appendix C. + + Graphics Interchange Format (GIF) Page 8 + +Specification + + GIF TERMINATOR + + In order to provide a synchronization for the termination of a GIF + + image file, a GIF decoder will process the end of GIF mode when the + + character 0x3B hex or ';' is found after an image has been processed. + + By convention the decoding software will pause and wait for an action + + indicating that the user is ready to continue. This may be a carriage + + return entered at the keyboard or a mouse click. For interactive + + applications this user action must be passed on to the host as a + + carriage return character so that the host application can continue. + + The decoding software will then typically leave graphics mode and resume + + any previous process. + + GIF EXTENSION BLOCKS + + To provide for orderly extension of the GIF definition, a mechanism + + for defining the packaging of extensions within a GIF data stream is + + necessary. Specific GIF extensions are to be defined and documented by + + CompuServe in order to provide a controlled enhancement path. + + GIF Extension Blocks are packaged in a manner similar to that used + + by the raster data though not compressed. The basic structure is: + + 7 6 5 4 3 2 1 0 Byte # + + +---------------+ + + |0 0 1 0 0 0 0 1| 1 '!' - GIF Extension Block Introducer + + +---------------+ + + | function code | 2 Extension function code (0 to 255) + + +---------------+ ---+ + + | byte count | | + + +---------------+ | + + : : +-- Repeated as many times as necessary + + |func data bytes| | + + : : | + + +---------------+ ---+ + + . . . . . . + + +---------------+ + + |0 0 0 0 0 0 0 0| zero byte count (terminates block) + + +---------------+ + + A GIF Extension Block may immediately preceed any Image Descriptor + + or occur before the GIF Terminator. + + All GIF decoders must be able to recognize the existence of GIF + + Extension Blocks and read past them if unable to process the function + + code. This ensures that older decoders will be able to process extended + + GIF image files in the future, though without the additional + + functionality. + + Graphics Interchange Format (GIF) Page 9 + +Appendix A - Glossary + + GLOSSARY + +Pixel - The smallest picture element of a graphics image. This usually + + corresponds to a single dot on a graphics screen. Image resolution is + + typically given in units of pixels. For example a fairly standard + + graphics screen format is one 320 pixels across and 200 pixels high. + + Each pixel can appear as one of several colors depending on the + + capabilities of the graphics hardware. + +Raster - A horizontal row of pixels representing one line of an image. A + + typical method of working with images since most hardware is oriented to + + work most efficiently in this manner. + +LSB - Least Significant Byte. Refers to a convention for two byte numeric + + values in which the less significant byte of the value preceeds the more + + significant byte. This convention is typical on many microcomputers. + +Color Map - The list of definitions of each color used in a GIF image. + + These desired colors are converted to available colors through a table + + which is derived by assigning an incoming color index (from the image) + + to an output color index (of the hardware). While the color map + + definitons are specified in a GIF image, the output pixel colors will + + vary based on the hardware used and its ability to match the defined + + color. + +Interlace - The method of displaying a GIF image in which multiple passes + + are made, outputting raster lines spaced apart to provide a way of + + visualizing the general content of an entire image before all of the + + data has been processed. + +B Protocol - A CompuServe-developed error-correcting file transfer protocol + + available in the public domain and implemented in CompuServe VIDTEX + + products. This error checking mechanism will be used in transfers of + + GIF images for interactive applications. + +LZW - A sophisticated data compression algorithm based on work done by + + Lempel-Ziv & Welch which has the feature of very efficient one-pass + + encoding and decoding. This allows the image to be decompressed and + + displayed at the same time. The original article from which this + + technique was adapted is: + + Terry A. Welch, "A Technique for High Performance Data + + Compression", IEEE Computer, vol 17 no 6 (June 1984) + + This basic algorithm is also used in the public domain ARC file + + compression utilities. The CompuServe adaptation of LZW for GIF is + + described in Appendix C. + + Graphics Interchange Format (GIF) Page 10 + +Appendix B - Interactive Sequences + + GIF Sequence Exchanges for an Interactive Environment + + The following sequences are defined for use in mediating control + + between a GIF sender and GIF receiver over an interactive communications + + line. These sequences do not apply to applications that involve + + downloading of static GIF files and are not considered part of a GIF + + file. + + GIF CAPABILITIES ENQUIRY + + The GCE sequence is issued from a host and requests an interactive + + GIF decoder to return a response message that defines the graphics + + parameters for the decoder. This involves returning information about + + available screen sizes, number of bits/color supported and the amount of + + color detail supported. The escape sequence for the GCE is defined as: + + ESC [ > 0 g (g is lower case, spaces inserted for clarity) + + (0x1B 0x5B 0x3E 0x30 0x67) + + GIF CAPABILITIES RESPONSE + + The GIF Capabilities Response message is returned by an interactive + + GIF decoder and defines the decoder's display capabilities for all + + graphics modes that are supported by the software. Note that this can + + also include graphics printers as well as a monitor screen. The general + + format of this message is: + + #version;protocol{;dev, width, height, color-bits, color-res}... <CR> + + '#' - GCR identifier character (Number Sign) + + version - GIF format version number; initially '87a' + + protocol='0' - No end-to-end protocol supported by decoder + + Transfer as direct 8-bit data stream. + + protocol='1' - Can use an error correction protocol to transfer GIF data + + interactively from the host directly to the display. + + dev = '0' - Screen parameter set follows + + dev = '1' - Printer parameter set follows + + width - Maximum supported display width in pixels + + height - Maximum supported display height in pixels + + color-bits - Number of bits per pixel supported. The number of + + supported colors is therefore 2**color-bits. + + color-res - Number of bits per color component supported in the + + hardware color palette. If color-res is '0' then no + + hardware palette table is available. + + Note that all values in the GCR are returned as ASCII decimal + + numbers and the message is terminated by a Carriage Return character. + + Graphics Interchange Format (GIF) Page 11 + +Appendix B - Interactive Sequences + + The following GCR message describes three standard EGA + + configurations with no printer; the GIF data stream can be processed + + within an error correcting protocol: + + #87a;1 ;0,320,200,4,0 ;0,640,200,2,2 ;0,640,350,4,2<CR> + + ENTER GIF GRAPHICS MODE + + Two sequences are currently defined to invoke an interactive GIF + + decoder into action. The only difference between them is that different + + output media are selected. These sequences are: + + ESC [ > 1 g Display GIF image on screen + + (0x1B 0x5B 0x3E 0x31 0x67) + + ESC [ > 2 g Display image directly to an attached graphics printer. + + The image may optionally be displayed on the screen as + + well. + + (0x1B 0x5B 0x3E 0x32 0x67) + + Note that the 'g' character terminating each sequence is in lower + + case. + + INTERACTIVE ENVIRONMENT + + The assumed environment for the transmission of GIF image data from + + an interactive application is a full 8-bit data stream from host to + + micro. All 256 character codes must be transferrable. The establishing + + of an 8-bit data path for communications will normally be taken care of + + by the host application programs. It is however up to the receiving + + communications programs supporting GIF to be able to receive and pass on + + all 256 8-bit codes to the GIF decoder software. + + Graphics Interchange Format (GIF) Page 12 + +Appendix C - Image Packaging & Compression + + The Raster Data stream that represents the actual output image can + + be represented as: + + 7 6 5 4 3 2 1 0 + + +---------------+ + + | code size | + + +---------------+ ---+ + + |blok byte count| | + + +---------------+ | + + : : +-- Repeated as many times as necessary + + | data bytes | | + + : : | + + +---------------+ ---+ + + . . . . . . + + +---------------+ + + |0 0 0 0 0 0 0 0| zero byte count (terminates data stream) + + +---------------+ + + The conversion of the image from a series of pixel values to a + + transmitted or stored character stream involves several steps. In brief + + these steps are: + + 1. Establish the Code Size - Define the number of bits needed to + + represent the actual data. + + 2. Compress the Data - Compress the series of image pixels to a series + + of compression codes. + + 3. Build a Series of Bytes - Take the set of compression codes and + + convert to a string of 8-bit bytes. + + 4. Package the Bytes - Package sets of bytes into blocks preceeded by + + character counts and output. + +ESTABLISH CODE SIZE + + The first byte of the GIF Raster Data stream is a value indicating + + the minimum number of bits required to represent the set of actual pixel + + values. Normally this will be the same as the number of color bits. + + Because of some algorithmic constraints however, black & white images + + which have one color bit must be indicated as having a code size of 2. + + This code size value also implies that the compression codes must start + + out one bit longer. + +COMPRESSION + + The LZW algorithm converts a series of data values into a series of + + codes which may be raw values or a code designating a series of values. + + Using text characters as an analogy, the output code consists of a + + character or a code representing a string of characters. + + Graphics Interchange Format (GIF) Page 13 + +Appendix C - Image Packaging & Compression + + The LZW algorithm used in GIF matches algorithmically with the + + standard LZW algorithm with the following differences: + + 1. A special Clear code is defined which resets all + + compression/decompression parameters and tables to a start-up state. + + The value of this code is 2**<code size>. For example if the code + + size indicated was 4 (image was 4 bits/pixel) the Clear code value + + would be 16 (10000 binary). The Clear code can appear at any point + + in the image data stream and therefore requires the LZW algorithm to + + process succeeding codes as if a new data stream was starting. + + Encoders should output a Clear code as the first code of each image + + data stream. + + 2. An End of Information code is defined that explicitly indicates the + + end of the image data stream. LZW processing terminates when this + + code is encountered. It must be the last code output by the encoder + + for an image. The value of this code is <Clear code>+1. + + 3. The first available compression code value is <Clear code>+2. + + 4. The output codes are of variable length, starting at <code size>+1 + + bits per code, up to 12 bits per code. This defines a maximum code + + value of 4095 (hex FFF). Whenever the LZW code value would exceed + + the current code length, the code length is increased by one. The + + packing/unpacking of these codes must then be altered to reflect the + + new code length. + +BUILD 8-BIT BYTES + + Because the LZW compression used for GIF creates a series of + + variable length codes, of between 3 and 12 bits each, these codes must + + be reformed into a series of 8-bit bytes that will be the characters + + actually stored or transmitted. This provides additional compression of + + the image. The codes are formed into a stream of bits as if they were + + packed right to left and then picked off 8 bits at a time to be output. + + Assuming a character array of 8 bits per character and using 5 bit codes + + to be packed, an example layout would be similar to: + + byte n byte 5 byte 4 byte 3 byte 2 byte 1 + + +-.....-----+--------+--------+--------+--------+--------+ + + | and so on |hhhhhggg|ggfffffe|eeeedddd|dcccccbb|bbbaaaaa| + + +-.....-----+--------+--------+--------+--------+--------+ + + Note that the physical packing arrangement will change as the + + number of bits per compression code change but the concept remains the + + same. + +PACKAGE THE BYTES + + Once the bytes have been created, they are grouped into blocks for + + output by preceeding each block of 0 to 255 bytes with a character count + + byte. A block with a zero byte count terminates the Raster Data stream + + for a given image. These blocks are what are actually output for the + + Graphics Interchange Format (GIF) Page 14 + +Appendix C - Image Packaging & Compression + + GIF image. This block format has the side effect of allowing a decoding + + program the ability to read past the actual image data if necessary by + + reading block counts and then skipping over the data. + + Graphics Interchange Format (GIF) Page 15 + +Appendix D - Multiple Image Processing + + Since a GIF data stream can contain multiple images, it is + + necessary to describe processing and display of such a file. Because + + the image descriptor allows for placement of the image within the + + logical screen, it is possible to define a sequence of images that may + + each be a partial screen, but in total fill the entire screen. The + + guidelines for handling the multiple image situation are: + + 1. There is no pause between images. Each is processed immediately as + + seen by the decoder. + + 2. Each image explicitly overwrites any image already on the screen + + inside of its window. The only screen clears are at the beginning + + and end of the GIF image process. See discussion on the GIF + + terminator. + + \ No newline at end of file diff --git a/hd b/hd @@ -0,0 +1,36 @@ +00000000 47 49 46 38 39 61 10 00 10 00 f0 01 00 00 00 00 |GIF89a..........| +00000010 ff ff 00 21 f9 04 05 08 00 01 00 2c 00 00 00 00 |...!.......,....| +00000020 10 00 10 00 00 02 28 8c 0d a9 c7 a1 bf 18 9c e0 |......(.........| +00000030 24 04 b1 6e b2 3e 8e 65 60 18 8d d3 48 5e 28 65 |$..n.>.e`...H^(e| +00000040 2e 9e 9a 6a b0 f3 6d dd 4c 57 16 6e 49 4d 01 00 |...j..m.LW.nIM..| +00000050 3b |;| +00000051 + +GIF89a +10 00 +10 00 +f0 +01 +00 +00 00 00 +ff ff 00 + + + +! f9 +04 +05 +08 00 +01 +00 + +, +00 00 00 00 +10 00 10 00 +00 +02 +28 +8c 0d a9 c7 a1 bf 18 9c e0 24 04 b1 6e b2 3e 8e 65 60 18 8d d3 48 5e 28 65 2e 9e 9a 6a b0 f3 6d dd 4c 57 16 6e 49 4d 01 +00 + +; diff --git a/hd-annotated b/hd-annotated @@ -0,0 +1,38 @@ +00000000 47 49 46 38 39 61 10 00 10 00 f0 01 00 00 00 00 |GIF89a..........| +00000010 ff ff 00 21 f9 04 05 08 00 01 00 2c 00 00 00 00 |...!.......,....| +00000020 10 00 10 00 00 02 28 8c 0d a9 c7 a1 bf 18 9c e0 |......(.........| +00000030 24 04 b1 6e b2 3e 8e 65 60 18 8d d3 48 5e 28 65 |$..n.>.e`...H^(e| +00000040 2e 9e 9a 6a b0 f3 6d dd 4c 57 16 6e 49 4d 01 00 |...j..m.LW.nIM..| +00000050 3b |;| +00000051 + +GIF89a +10 00 # width in pixels, LSB first +10 00 # height in pixels, LSB first +f0 # f0 = 11110000 + # 1 | 111 | 0 | 000 +01 # index in GCT of background color +00 + # GCT +00 00 00 +ff ff 00 + + + +! f9 +04 #length in bytes +05 +08 00 +01 +00 #term + +, +00 00 00 00 #top left +10 00 10 00 #width, height +00 +02 #min number of colors +28 #length in bytes +8c 0d a9 c7 a1 bf 18 9c e0 24 04 b1 6e b2 3e 8e 65 60 18 8d d3 48 5e 28 65 2e 9e 9a 6a b0 f3 6d dd 4c 57 16 6e 49 4d 01 +00 #term + +;