Я пишу приложение с графиком XY. У меня есть процедура, которая записывает сотни точек (используя инструкцию Points
) десятки раз в секунду. Периодически я хотел бы рисовать точки в текстуре, используя Kivy Fbo, поэтому мой холст не обрабатывает мегабайты вершинных инструкций. После того, как точки нарисованы, я хочу загрузить текстуру обратно на холст. Холст также обрабатывает другие графические инструкции, поэтому я не могу просто очистить его или что-то в этом роде.
Ниже я приведу фрагмент кода того, что я пытаюсь сделать, хотя я уверен, что с моим подходом что-то не так. В настоящее время вызов save()
для текстуры Fbo выдает это исключение:
AttributeError: у объекта '_io.BytesIO' нет атрибута 'закодировать'
Kivy версия: 1.10.1, Python 3.5.4 (64-битная Windows 7):
def _save_persist(self):
#imports:
#from PIL import Image
#from kivy.core.image import Image as CoreImage
#from kivy.uix.image import Image as kiImage
#from io import BytesIO
self.persist_fbo = Fbo(size=(self.width,self.height))
#chan_info is a list containing data about each channel
#_persist_chan_inst is a dictionary of InstructionGroup objects
for chan in self.chan_info:
persist_inst = self._persist_chan_inst.get(chan.chan_name)
if not persist_inst is None:
self.persist_fbo.add(persist_inst)
self.persist_fbo.draw()
bytebuff = BytesIO()
pimg = Image.new("RGBA",(int(self.width),int(self.height)),(0,0,0,0))
pimg.save(bytebuff,format="PNG")
bytebuff.seek(0)
self.persist_fbo.texture.save(bytebuff)
img = CoreImage(arg=bytebuff,ext='PNG')
self.texture = img