インターレース GIF画像は 4 つの画像として保存されます
- 画像の 8 行ごとに含まれる (サイズの 1/8)
- 欠落している画像の 4 行目 (サイズの 1/8) をすべて含む
- 画像の欠けている偶数行をすべて含む (サイズの 1/4)
- 画像のすべての奇数行を含む (サイズの 1/2)
これは、低速のインターネット接続を介して読み込み中に画像を表示できるようにするためです...新しいチャンクごとに詳細が増加します...
したがって、画像が 4 つの非常によく似た画像のように見える場合、結果は問題ありません。誤ってデコードするか、GIF に Interlaced フラグが設定されていません。
ファイルにアニメーション フレームが含まれていない場合は運が悪いですが、それらが存在し、レンダリングされていない場合は、ファイルの GIF の終わりが間違って配置されていないことを確認するか、フラグが台無しになっている可能性があることを確認してください...別の方法を試しましたか? GIF ビューア (バグのあるものもあります)
[編集1] GIFをデコードした後
GIF89aがあり、各フレームにインターレース フラグがありません。したがって、画像は正しくインターレースされていますが、視聴者はまったくインターレースされていないと考えています...各フレームヘッダーでインターレースフラグをマークする必要があります。
struct _img // this is image frame header
{
// Logical Image Descriptor
BYTE Separator; /* Image Descriptor identifier 0x2C */
WORD x0; /* X position of image on the display */
WORD y0; /* Y position of image on the display */
WORD xs; /* Width of the image in pixels */
WORD ys; /* Height of the image in pixels */
BYTE Packed; /* Image and Color Table Data Information */
} img;
img.Packed|=64; // this will set the interlaced flag
そのためには、GIF をデコード/ストリーム コピーする必要がありますが、これは思ったほど簡単ではありません。
見る:
ここでは、フレーム コピー + デインターレース + インターレース エンコードの結果 (制御/情報/補助フィードのスキップ ...)