21 memset( &s, 0,
sizeof(stbi__context) );
23 if (!(f = stbi__fopen(filename,
"rb")))
26 stbi__start_file(&s, f);
28 if (stbi__gif_test(&s)) {
32 unsigned char *ignored;
34 memset( &g, 0,
sizeof(stbi__gif) );
38 while (stbi__gif_load_next(&s, &g, &c, 4, ignored))
46 if ( (
frames > 1 ) && ( maxDelay > 0 ) ) {
62 unsigned char *result = 0;
64 memset( &s, 0,
sizeof(stbi__context) );
66 if (!(f = stbi__fopen(filename,
"rb")))
67 return stbi__errpuc(
"can't fopen",
"Unable to open file");
69 stbi__start_file(&s, f);
71 if (stbi__gif_test(&s))
77 unsigned char *ignored;
79 memset(&g, 0,
sizeof(g));
80 memset(&head, 0,
sizeof(head));
84 while (gr->data = stbi__gif_load_next(&s, &g, &c, 4, ignored))
87 if (gr->data == (
unsigned char*)&s)
93 unsigned char * ptr = gr->data;
96 gr->data =
malloc( g.w * g.h * 4 );
98 memset( gr->data, 0, g.w * g.h * 4 );
100 memcpy( gr->data, ptr, g.w * g.h * 4 );
103 if (prev) prev->
next = gr;
126 unsigned int size = 4 * g.w * g.h;
127 unsigned char *p = 0;
129 result = (
unsigned char*)stbi__malloc(*
frames * (
size + 2));
136 memcpy(p, gr->data,
size);
138 *p++ = gr->delay & 0xFF;
139 *p++ = (gr->delay & 0xFF00) >> 8;
143 if (prev != &head) STBI_FREE(prev);