亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gif.c

?? LZW compression example with java
?? C
字號:
/*The GIF loader, Included as a part of the compression tutorial
 *Written By Martin Zolnieryk (c) 2004
 *This code is freeware, however if you use this some credit
 *be nice.
 *This code is based upon the GifAllegS Library
*/

#include <stdio.h>
#include "allegro.h"
#include "lzw.h"
#include "gif.h"

//This grabs the code
int get_gif_lzw_code(FILE *fp,LZW *table, GIF *gif)
{
unsigned int code = 0;
//Gif specialized code
//Restart new buffer block?
//code = 0;		
while(table->buffer_bits <=((sizeof(int)-sizeof(char))*8))//Never go over than size - 8or we loose data
 {
//No point reading anymore, if the files done
if(feof(fp))
{
break;
}
   
   table->buffer |= ((unsigned char)fgetc(fp)) << table->buffer_bits; //We store all data in the buffer
   table->buffer_bits+= 8; 

   table->to_nbuffer--;
   if(table->to_nbuffer <= 0) //We reset the table data
   { 
    table->buffer_size = getc(fp);
    table->to_nbuffer = table->buffer_size;
    }
}


code = table->buffer << (sizeof(int) * 8 - table->bits); //extract code
code = code   >> (sizeof(int) * 8 - table->bits);
table->buffer >>= table->bits; //remove code from buffer
table->buffer_bits -= table->bits;

return code;
}

//This is where all the work is done
BITMAP *load_gif(const char *filename, RGB *pal)
{
GIF al_gif;
FILE *fp;
LZW table;
RGB *g_pal;
int looper;


///Everything here from Decompress LZW
short int first_code = -1;      //Check psuedo code, grabs next char
unsigned short int next_code;     
short int first_char = -1;   //Is for the if fix,make sure is 0 to escape potential bugs
short int code_number = -1;    //Holds code value for STRING_BUFFER
int counter=0;
unsigned char *string = NULL;

//Start Code
g_pal = pal;
if(!g_pal)
 {
 g_pal = malloc(sizeof(RGB) * 256);
 }

if(!(fp = fopen(filename, "rb")))
     return NULL; 

for(looper = 0;looper <6;looper++)
   al_gif.id[looper] = getc(fp);

//Test if valid header
if(al_gif.id[0] != 'G' || al_gif.id[1] !='I' || al_gif.id[2] !='F')
   return NULL;

//Two types of gif, 87a, 89a, we check the numero
if(al_gif.id[4] == '9') //89a
    NULL;
else                    //87a
    NULL;

//Load Withs
fread(&al_gif.s_width, 2, 1, fp); 
fread(&al_gif.s_height,2,1,fp);

//Get Important Info
al_gif.global_depth = getc(fp);
al_gif.bpp = 1 + (al_gif.global_depth & 7);

//Irrelevant Entries,
//We dont need to use these
fgetc(fp);
fgetc(fp);

//If the palette is global, we load it
if(al_gif.global_depth & 128);
{
  for(looper = 0; looper < (1 << al_gif.bpp); looper++)
  {
      g_pal[looper].r = (fgetc(fp) /4);
      g_pal[looper].g = (fgetc(fp) /4);
      g_pal[looper].b = (fgetc(fp) /4);
  }
}

//We keep reading until "," which begins the image header.
while(getc(fp) != ',')
{
//Some error checking
 if(feof(fp))
   return NULL;
}
//Read image header, the sizes
fread(&al_gif.ileft, 2, 1, fp); 
fread(&al_gif.itop, 2, 1, fp); 
fread(&al_gif.iwidth, 2, 1, fp); 
fread(&al_gif.iheight, 2, 1, fp); 
//Get local depth
al_gif.depth = getc(fp);

//Allocate Memory
if(!(al_gif.image = create_bitmap_ex(8,al_gif.s_width, al_gif.s_height)))
 return NULL;
create_lzw_table(&table,12);


//We don't support all gif's 
//For this little proggy
  if (al_gif.depth & 128) 
  {
    allegro_message("Local colour maps/Animated Images not supported");
    return NULL;
  }
  if (al_gif.depth & 64) 
  {
    allegro_message ("Interlaced images not supported\n");
    return NULL;
  }

//Last Minute Initalizing
al_gif.cc = getc(fp);
al_gif.code_size =al_gif.cc + 1;   //Starting Code Size
table.bits = al_gif.code_size;     //Bits used for table
table.buffer_size = getc(fp);      //al_gif.block_byte; //Buffer size
table.to_nbuffer = table.buffer_size;  //Countdown
table.codes_reserved = GIF_EOI;        //Set reserved code
al_gif.counter = 0;                    //restart drawing buffer




//We start the loop
while((next_code = get_gif_lzw_code(fp,&table,&al_gif))!= GIF_EOI && al_gif.counter <= (al_gif.image->w*al_gif.image->h))
  {
   if(next_code == GIF_CC) //If it's a clear code
    {
      clear_lzw_table(&table);   //We clear everthing and laod first code
      table.bits = al_gif.cc+1;
	  table.codes_used = 0;
	  al_gif.code_size = al_gif.cc +1;
      next_code = get_gif_lzw_code(fp,&table,&al_gif);
      first_code = next_code;
      first_char = first_code;
      draw_lzw_pixel(al_gif.image,al_gif.counter,next_code); //Draw first_code
      al_gif.counter++;
    }
//If its not a clear code, or an EOI
    else
    {
    //If not in table
      if (next_code > table.codes_used + table.codes_reserved)          
      {
        table.codes_used++;
        table.prefix[next_code]= first_code;
        table.character[next_code]=first_char;
        looper = lzw_get_string(&table,next_code);
      }
      //If the code was already in the table
      //See if we can add a new code to the table
      //Make sure we have not gone over the table size
      else if(table.codes_used + table.codes_reserved < table.lzw_size )                                   
      {                                       
          looper = lzw_get_string(&table,next_code);
          table.codes_used++;
          table.prefix[table.codes_used +table.codes_reserved]= first_code;
          table.character[table.codes_used +table.codes_reserved]=table.string[looper-1];
      }
      else //Characters that we output
        looper = lzw_get_string(&table,next_code);


    //We Draw the gif
      first_char = table.string[looper-1];    
      first_code = next_code;
      while(looper > 0)
       {
       draw_lzw_pixel(al_gif.image,al_gif.counter,table.string[looper-1]);
       al_gif.counter++;
 
       looper--;
       }
 
  //This is a check to see if the code_size must grow by a bit or not.
    if((1 << al_gif.code_size)-1 <= table.codes_used + table.codes_reserved && al_gif.code_size < 12)
    {
    table.bits++;
    al_gif.code_size++;
    }
   
   }//End else 
  } //End While

//Close and clean up
fclose(fp);
//Check to see if we allocated palette
if(g_pal != pal)
  free(g_pal);

return al_gif.image;
}


//This makes a calculation Based on width and height where the pixel should go
void draw_lzw_pixel(BITMAP *image, long counter,unsigned char color)
{
putpixel(image,counter % image->w,counter / image->w,color);
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情一区二区| 肉丝袜脚交视频一区二区| 国产精品66部| 亚洲永久免费视频| 国产亚洲视频系列| 欧美高清视频一二三区| 国产精品99久| 亚洲444eee在线观看| 国产精品私人影院| 国产天堂亚洲国产碰碰| 欧美系列亚洲系列| 99re热视频精品| 粉嫩嫩av羞羞动漫久久久| 狠狠色丁香婷婷综合| 午夜国产精品影院在线观看| 亚洲精品在线三区| 欧美一区二区美女| 欧美日韩国产另类一区| 色综合久久综合网欧美综合网| av网站免费线看精品| 亚洲成人黄色小说| 亚洲大片精品永久免费| 日本免费在线视频不卡一不卡二| 午夜成人免费视频| 亚洲一二三四在线观看| 国产精品成人免费在线| 综合自拍亚洲综合图不卡区| 亚洲欧美电影一区二区| 日韩美女视频一区二区| 一区二区三区不卡在线观看| 亚洲欧美一区二区三区国产精品 | 色婷婷国产精品综合在线观看| 国产成人av资源| 不卡高清视频专区| av网站免费线看精品| 91官网在线观看| 精品黑人一区二区三区久久| 久久久国产精品午夜一区ai换脸| 中文字幕视频一区| 一区二区成人在线视频| 石原莉奈在线亚洲三区| 日韩高清在线一区| 成人网男人的天堂| 精品女同一区二区| 国产精品初高中害羞小美女文| 亚洲视频一区在线| 亚洲a一区二区| 成人一级片网址| 日韩欧美一区二区视频| 国产精品理论在线观看| 秋霞国产午夜精品免费视频| 国产乱子伦视频一区二区三区| 欧洲精品视频在线观看| 国产精品水嫩水嫩| 婷婷成人激情在线网| 岛国精品在线播放| 欧美精品一卡两卡| 国产精品欧美一级免费| 亚洲国产精品影院| 国产在线精品一区二区夜色| 欧美二区三区91| 亚洲精品久久7777| 国产精品一线二线三线精华| 成人av网站在线| 精品免费国产二区三区| 蜜臀av一区二区在线免费观看| 在线观看av一区| 亚洲手机成人高清视频| 国产精品一区免费视频| 欧美精品一区二区蜜臀亚洲| 日本va欧美va精品| 欧美一区二区三区喷汁尤物| 亚洲午夜在线观看视频在线| 大胆亚洲人体视频| 一区二区在线电影| 欧美视频一区在线观看| 一区二区三区蜜桃网| 成人精品一区二区三区四区| 国产精品三级av| 欧美日韩在线综合| 日韩不卡一区二区| 精品国产乱码久久久久久闺蜜 | 国产精品77777| 美国十次综合导航| 国产自产高清不卡| 亚洲欧洲日韩在线| 国产日韩视频一区二区三区| 日韩欧美中文字幕制服| 欧美一区二区视频观看视频| 欧美日韩成人综合在线一区二区| 欧美视频在线观看一区二区| 91日韩精品一区| 91麻豆文化传媒在线观看| av不卡一区二区三区| 99在线精品一区二区三区| 91视频免费观看| 欧美色手机在线观看| 3751色影院一区二区三区| 日韩欧美你懂的| 久久九九99视频| 亚洲精品自拍动漫在线| 悠悠色在线精品| 男男成人高潮片免费网站| 狠狠色伊人亚洲综合成人| 成人免费视频一区二区| 色综合久久66| 91麻豆精品国产91久久久| 久久久亚洲精品一区二区三区 | 国产亚洲午夜高清国产拍精品| 精品久久国产97色综合| 欧美国产一区二区在线观看| 亚洲欧美一区二区不卡| 午夜精品免费在线观看| 国产乱色国产精品免费视频| 色综合一个色综合| 91精品国产麻豆国产自产在线| 欧美va亚洲va| 亚洲日本在线a| 日本欧美在线看| 国产大陆a不卡| 欧美日韩一区成人| 26uuu亚洲| 一区二区在线观看视频| 麻豆91在线看| 色综合久久久久综合体桃花网| 欧美精品日韩一本| 国产精品国产三级国产普通话99 | 91精品国产色综合久久久蜜香臀| 久久伊人蜜桃av一区二区| 亚洲另类色综合网站| 美女视频网站黄色亚洲| 91日韩在线专区| 精品久久久久99| 一区二区三区四区不卡在线| 国产真实乱子伦精品视频| 欧美三级在线播放| 国产精品婷婷午夜在线观看| 日韩va亚洲va欧美va久久| 99国产精品久久| 日韩一区二区在线观看| 亚洲一区二区精品视频| 成人福利视频网站| 26uuu欧美| 日韩精品一级中文字幕精品视频免费观看 | 欧美伊人久久大香线蕉综合69| 久久综合99re88久久爱| 亚洲成人av电影| 99re热这里只有精品免费视频| 精品国产凹凸成av人网站| 日韩精品电影在线| 欧美在线观看视频在线| 国产精品第四页| 国产成人一级电影| 日韩欧美中文一区| 免费看欧美美女黄的网站| 欧美视频一区二区在线观看| 亚洲视频综合在线| 成人午夜免费电影| 久久嫩草精品久久久精品| 蜜臀av一区二区在线观看| 欧美日本在线播放| 亚洲一区在线视频| 91久久线看在观草草青青| 国产精品伦理在线| 成人av在线一区二区三区| 久久亚洲春色中文字幕久久久| 免费精品视频在线| 欧美一级理论性理论a| 天堂va蜜桃一区二区三区| 精品视频在线免费看| 亚洲综合激情另类小说区| 色欧美乱欧美15图片| 一区二区三区日韩精品| 一本大道av伊人久久综合| 亚洲自拍与偷拍| 91国内精品野花午夜精品| 亚洲丶国产丶欧美一区二区三区| 91精品福利在线| 亚洲国产成人va在线观看天堂| 欧美午夜电影网| 三级影片在线观看欧美日韩一区二区| 欧美三区在线观看| 日本视频在线一区| 7777女厕盗摄久久久| 免费成人在线视频观看| 欧美va亚洲va在线观看蝴蝶网| 国产一区三区三区| 中文字幕第一页久久| 91麻豆国产福利在线观看| 亚洲自拍另类综合| 91精品国产麻豆| 黄网站免费久久| 中文字幕不卡在线观看| 91视频免费播放| 婷婷久久综合九色综合伊人色| 在线不卡一区二区| 国产又粗又猛又爽又黄91精品| 中文字幕中文字幕一区二区| 日本高清不卡aⅴ免费网站| 视频精品一区二区|