You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
917 B
44 lines
917 B
8 years ago
|
|
||
|
def loadBbm(filename):
|
||
|
""" Parse a bbm file and return an Animation object. """
|
||
|
|
||
|
def getint16(vals):
|
||
|
return (cals[2]>>8) + vals[3]
|
||
|
def getint32(vals):
|
||
|
return (vals[0]>>24) + (vals[1]>>16) + (cals[2]>>8) + vals[3]
|
||
|
|
||
|
f = open(filename, 'r')
|
||
|
rawdata = f.read()
|
||
|
f.close()
|
||
|
|
||
|
data = [ ord(x) for x in rawdata ]
|
||
|
|
||
|
if getint32(data[0:4]) != 0x23542666:
|
||
|
raise ValueError('magic does not match')
|
||
|
|
||
|
height = getint16(data[4:6])
|
||
|
width = getint16(data[6:8])
|
||
|
channels = getint16(data[8:10])
|
||
|
maxval = getint16(data[10:12])
|
||
|
|
||
|
framecnt = getint32(data[10:14])
|
||
|
duration = getint32(data[14:18])
|
||
|
frameptr = getint32(data[18:22])
|
||
|
|
||
|
# TODO: parse additional headers
|
||
|
|
||
|
if rawdata[frameptr:(frameptr+4)] != 'frms':
|
||
|
raise ValueError('frame pointer does not point to frame start marker')
|
||
|
|
||
|
framedata = data[frameptr + 4:]
|
||
|
framesize = width*height*channels
|
||
|
|
||
|
frames = []
|
||
|
while True:
|
||
|
pass
|
||
|
|
||
|
raise Exception('uarrgh!!')
|
||
|
|
||
|
|
||
|
|