回答編集履歴
1
追記
test
CHANGED
@@ -8,11 +8,23 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
+
追記
|
12
|
+
|
13
|
+
NETSCAPE2.0拡張ですね。それなら、そう書かないとわかりませんよ。もっと質問の仕方も勉強しましょう。
|
14
|
+
|
15
|
+
また、もっと感謝の気持ちを表さないと、回答をもらえなくなりますよ。
|
16
|
+
|
17
|
+
以下のコードで、繰り返し回数が取れました。地球のGIF Animation では0xffff = 無限繰り返しになっています。0xffff なのをとれていないと誤解していたか、元のコードでは >=3 で繰り返しのブロックと判定していましたので、delay のブロックも繰り返しのブロックと認識されて、上書きされてしまったのではないでしょうか。
|
18
|
+
|
19
|
+
|
20
|
+
|
11
21
|
```lang-C
|
12
22
|
|
13
23
|
#include <stdio.h>
|
14
24
|
|
15
25
|
#include <stdlib.h>
|
26
|
+
|
27
|
+
#include <string.h>
|
16
28
|
|
17
29
|
#include <gif_lib.h>
|
18
30
|
|
@@ -24,6 +36,12 @@
|
|
24
36
|
|
25
37
|
int error;
|
26
38
|
|
39
|
+
SavedImage *image;
|
40
|
+
|
41
|
+
int loop_count = -1;
|
42
|
+
|
43
|
+
int i, k;
|
44
|
+
|
27
45
|
|
28
46
|
|
29
47
|
GifFileType *gifFile = DGifOpenFileName("C:\\temp\\earth.gif", &error);
|
@@ -34,6 +52,66 @@
|
|
34
52
|
|
35
53
|
|
36
54
|
|
55
|
+
for (i = 0; i < gifFile->ImageCount; ++i)
|
56
|
+
|
57
|
+
{
|
58
|
+
|
59
|
+
image = &(gifFile->SavedImages[i]);
|
60
|
+
|
61
|
+
for (k = 0; k < image->ExtensionBlockCount; ++k)
|
62
|
+
|
63
|
+
{
|
64
|
+
|
65
|
+
ExtensionBlock *block = &image->ExtensionBlocks[k];
|
66
|
+
|
67
|
+
switch (block->Function)
|
68
|
+
|
69
|
+
{
|
70
|
+
|
71
|
+
case APPLICATION_EXT_FUNC_CODE:
|
72
|
+
|
73
|
+
if (block->ByteCount == 11)
|
74
|
+
|
75
|
+
{
|
76
|
+
|
77
|
+
if (memcmp(block->Bytes, "NETSCAPE2.0", 11) == 0)
|
78
|
+
|
79
|
+
{
|
80
|
+
|
81
|
+
if (i + 1 < image->ExtensionBlockCount)
|
82
|
+
|
83
|
+
{
|
84
|
+
|
85
|
+
++block;
|
86
|
+
|
87
|
+
if ((block->ByteCount == 3) && ((block->Bytes[0] & 7) == 1))
|
88
|
+
|
89
|
+
{
|
90
|
+
|
91
|
+
loop_count =
|
92
|
+
|
93
|
+
((block->Bytes[1] & 0xFF) |
|
94
|
+
|
95
|
+
((block->Bytes[2] & 0xFF) << 8));
|
96
|
+
|
97
|
+
printf("loop count found %d\n", loop_count);
|
98
|
+
|
99
|
+
}
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
break;
|
108
|
+
|
109
|
+
}
|
110
|
+
|
111
|
+
}
|
112
|
+
|
113
|
+
}
|
114
|
+
|
37
115
|
}
|
38
116
|
|
39
117
|
```
|