diff --git a/tools/gifanalyzer/gifanalyzer.c b/tools/gifanalyzer/gifanalyzer.c new file mode 100644 index 00000000..60153251 --- /dev/null +++ b/tools/gifanalyzer/gifanalyzer.c @@ -0,0 +1,97 @@ +/* vim:expandtab:ts=2 sw=2: +*/ +/* Grafx2 - The Ultimate 256-color bitmap paint program + * Gif Analyzer tool + + Copyright 2010 Adrien Destugues + + Grafx2 is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2 + of the License. + + Grafx2 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grafx2; if not, see +*/ + +#include +#include +#include +#include + +int main(int argc, char* argv[]) +{ + FILE* theFile; + + if(argc != 2) + { + printf("%s file.gif\n",argv[0]); + exit(-1); + } + + theFile = fopen(argv[1], "r"); + + uint8_t buffer[256]; + + fread(buffer, 1, 6, theFile); + buffer[6] = 0; + + printf("Signature: %6s\n", buffer); + + uint16_t w,h; + + fread(&w,2,1,theFile); + fread(&h,2,1,theFile); + + printf("Resolution: %dx%d\n",w,h); + + fread(buffer,1,3,theFile); + + int colors = ((buffer[0]&0b01110000)>>4)+1; + colors = pow(2,colors); + + int bpp = (buffer[0]&0xF) +1; + + printf("Color palette: %#02.2x\n",buffer[0]&0xFF); + if (buffer[0] & 0b10000000) + printf("\tGlobal palette\n"); + printf("\tColor count: %d\n", colors); + printf("\tBits per pixel: %d\n",bpp); + + printf("Index of background color: %d\n",buffer[1]); + printf("(reserved byte: %d)\n",buffer[2]); + + printf("Color palette:\n"); + for (int i = 0; i < pow(2,bpp); i++) + { + fread(buffer,1,3,theFile); + printf("\t%d: %u %u %u\t",i,buffer[0], buffer[1], buffer[2]); + if ((i+1)%4 ==0)puts(""); + } + + int i = 0; + do { + fread(buffer,1,1,theFile); + i++; + } while (i != ','); + + if (i > 1); + printf("Skipped %d meaningless bytes before image descriptor\n",i); + + uint16_t x,y; + + fread(&x,2,1,theFile); + fread(&y,2,1,theFile); + fread(&w,2,1,theFile); + fread(&h,2,1,theFile); + + printf("Image descriptor\n"); + printf("\tx=%d y=%d w=%d h=%d\n",x,y,w,h); + + fclose(theFile); +}