首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyGame将cStringIO加载为图像

PyGame将cStringIO加载为图像
EN

Stack Overflow用户
提问于 2013-03-27 01:53:40
回答 1查看 613关注 0票数 2

因此,我已经在网上尝试了一些解决方案,但每个解决方案都返回不同的错误。最近,我决定尝试一下这样的方法:

代码语言:javascript
复制
import cStringIO, pygame, os
from pygame.locals import *

pygame.init()
mainClock = pygame.time.Clock()
WINDOWWIDTH = 640
WINDOWHEIGHT = 480
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('StringIO Test')

with open("image.png", "rb") as infile:
    outfile = cStringIO.StringIO()
    outfile.write(infile.read())


class DummyFile:
    def __init__(self, data):
       self.data = data
        self.pos = 0

    def read(self, size=None):
        start = self.pos
        end = len(self.data) - 1

        if size is not None:
            end = min(len(self.data), self.pos + size)

        self.pos = end
        return self.data[start:end]

    def seek(self, offset, whence=0):
        if whence == 0:
            self.pos = offset
        elif whence == 1:
            self.pos = self.pos + offset
        elif whence == 2:
            self.pos = len(data) + offset    

    def write(self):
        pass

while True:
    windowSurface.fill((0,0,0))
    testIm = pygame.image.load(DummyFile(outfile.getvalue()))
    testImRect = testIm.get_rect()
    testImRect.topleft = (0,0)
    windowSurface.blit(testIm, testImRect)
    pygame.display.flip()

它只会返回:

代码语言:javascript
复制
error: Can't seek in this data source

基本上,我的程序将加密/解密图像文件,并允许用户在不将解密的副本保存到硬盘驱动器的情况下查看它们。在另一个问题中,我被告知stringIO对象可用于此目的,如果您打算广泛使用cStringIO,python文档建议您使用它。问题是pygame不想把对象当作一个图像。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 02:06:34

将此内容添加到DummyFile

代码语言:javascript
复制
def tell(self):
    return self.pos

它认为您的类似文件的对象是不可查找的,因为它缺少该方法。通过向DummyFile添加一个__getattr__方法并查看调用了什么类型的方法来解决这个问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15644096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档