sample_gif_anim.hsp

sample\hspd2d\sample_gif_anim.hsp » Plain Format

;============================================================
;   hspd2d サンプル - Animated GIF 読み込み (L1-2)
;
;   使い方:
;     引数 (dir) に animated GIF のパスを指定するか、
;     カレントディレクトリに "anim.gif" を置いて実行
;
;   動作:
;     - animated GIF を load
;     - フレーム数 / 各フレームの delay / loop count を mes で表示
;     - 各フレームを個別の PNG に dump (anim_frame_NN.png)
;     - 最初のフレームをカレント画像として使い anim_first.png を保存
;============================================================

#include "hspd2d.hsp"

    path = "anim.gif"
    exist path
    if strsize < 0 {
        mes "sample_gif_anim: not found: " + path
        mes "Place an animated GIF as 'anim.gif' in the current directory."
        end 1
    }

    d2d_init
    d2d_gif_load path
    h = stat
    if h < 0 {
        mes "d2d_gif_load failed"
        d2d_shutdown
        end 1
    }

    d2d_gif_frame_count h : n = stat
    d2d_gif_loop_count  h : loops = stat
    mes "GIF: " + path
    mes "  frame count = " + n
    mes "  loop count  = " + loops + "  (0 = infinite)"

    ; 各フレームの delay を表示
    repeat n
        d2d_gif_frame_delay h, cnt
        mes "  frame " + cnt + " delay = " + stat + " x10ms"
    loop

    ; 各フレームを PNG に dump (最大 8 枚)
    nmax = n
    if nmax > 8 : nmax = 8
    i = 0
    *dump_loop
    if i >= nmax : goto *dump_end
        d2d_gif_frame_to_image h, i, 0
        fname = "anim_frame_" + strf("%02d", i) + ".png"
        d2d_image_save 0, fname
        mes "saved: " + fname
        d2d_image_delete 0
        i = i + 1
        goto *dump_loop
    *dump_end

    ; 1 枚目をカレント画像として使い少しテキストを乗せて保存
    d2d_gif_frame_to_image h, 0, 0
    d2d_font  "Yu Gothic UI", 14.0, 700, 0
    d2d_color 255, 255, 0, 255
    d2d_drawtext "frame 0 from hspd2d_gif", 4, 4, 0, 0
    d2d_image_save 0, "anim_first.png"
    mes "saved: anim_first.png"

    d2d_image_delete 0
    d2d_gif_free h
    d2d_shutdown

    mes "done."
    end