Как сохранить Fbo для использования в качестве текстуры для холста? - PullRequest
0 голосов
/ 06 ноября 2018

Я пишу приложение с графиком 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...