如何解决从二进制数据创建动画的快速方法
我有一个C ++程序,该程序将2D网格的像素数据写入二进制文件。每个二进制文件可能具有多个背靠背的网格状态,并且这些二进制文件可能有多个。
例如我可以有10个二进制文件bin0,bin1,bin2 ... bin9,每个二进制文件保存10个网格状态的数据,总共有100个网格状态要进行动画处理。
我正在寻找一种从这些二进制文件中的网格状态创建动画的快速方法。
我的最佳尝试是使用python和PIL.Image创建gif:
import glob
import numpy as np
from PIL import Image
from functools import partial
def create_images():
paths = glob.glob('./outfiles/dump*')
imgs = []
for path in sorted(paths,key=lambda x: int(x.split("p")[1])):
with open(path,'rb') as ifile:
for dat in iter(partial(ifile.read,rows*cols),b''):
mem = memoryview(dat).cast('B',shape=[rows,cols])
arr = np.asarray(mem)
img = Image.fromarray(arr*255)
imgs.append(img)
return imgs
rows = 128
cols = 128
imgs = create_images()
imgs[0].save('./animation.gif',save_all=True,append_images=imgs[1:],loop=0)
但是,如果我有成千上万张图像,每张图像都有数千个像素,那么我实际写gif的最后一行可能会花费很长时间。当图像较大时,gif的呈现质量也很差。
期待有关如何使用与Pillow不同的库来使其快速运行的建议。如果有更好的选择使用C / C ++(或其他语言,但首选Python或C / C ++),则不必担心坚持使用Python,动画也不必是gif。
在我的情况下,我正在使用0或1的网格数据(上下文是Conway的“生命游戏”),因此欢迎利用此优势的优化。但是请注意,当前每个1或0占用二进制文件中的整个字节,因此未打包为位。
编辑
只需添加一个辅助python脚本来生成二进制文件即可,正如我上面为那些愿意的人所述。
import numpy as np
rows = 128
cols = 128
img_per_file = 10
num_files = 3
filesize = rows*cols*img_per_file
for i in range(num_files):
filename = 'bin'+str(i)
data = np.random.randint(2,size=filesize,dtype=np.uint8).tobytes()
f = open(filename,'wb')
f.write(data)
f.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。