图像数据存储为原始 RGBA 四边形,宽度/高度/开始在靠近开头的块中定义。
您可以使用此 python 脚本从未压缩的 bin 中提取图像数据:
import struct
import sys
import os
from PIL import Image
if len(sys.argv) != 3:
print 'usage: process.py <filename> <outdir>'
sys.exit(1)
out_dir = sys.argv[2]
if not os.path.exists(out_dir):
os.mkdir(out_dir)
data = open(sys.argv[1],'rb').read()
offset = 0
(magic,) = struct.unpack_from('<8s', data, offset)
offset = offset + 8
if magic != 'ANIM1 ':
print 'incorrect magic!'
sys.exit(1)
(stage_width, stage_height, cmdblock_len, unk) = struct.unpack_from('<LLLL', data, offset)
offset = offset + 16
print "stage_width: %d\nstage_height: %d\ncmdblock_len: %d\n" %(stage_width, stage_height, cmdblock_len)
(cmd_code, img_num, img_width, img_height, bytes_per_pixel, data_start) = struct.unpack_from('<LLLLLL', data, offset)
while cmd_code == 0x11:
print 'generating img_%d' % (img_num)
im = Image.frombuffer('RGBA', (img_width, img_height), data[0x20+cmdblock_len+data_start:], 'raw', 'RGBA', 0, 1)
im.save(os.path.join(out_dir, 'img_%d.png'%img_num))
offset = offset + 0x20
(cmd_code, img_num, img_width, img_height, bytes_per_pixel, data_start) = struct.unpack_from('<LLLLLL', data, offset)
必须使用该初始块中的其他数据将它们合成到实际动画中。
您可以注入自己的相同尺寸/格式的图像来替换动画元素。它不会让您完全控制,但它应该为您提供一些自定义动画的基本功能。