首页 > 解决方案 > 为什么 pygame.surface.get_view() 只有在表面旋转时才会失败?

问题描述

将图像上传到表面并使用 get_view() 函数工作正常,我能够利用该函数的原始字节内容。但是,如果我尝试在旋转表面上 get_view() 它会失败并显示以下内容:(附加说明它不会在 90 度增量上失败)。“ValueError:字节不连续”以下是简化形式的问题:

Python 版本 3.8.1

Pygame 版本 1.9.6

操作系统:Windows 10 专业版

import pygame as pg

Surf = pg.image.load('C:/TimW/Tmp_Images/Test3.png') # Works
Surf_View = Surf.get_view() # Works
Surf_New = pg.transform.rotate(Surf,10) #Works
Surf_New_View = Surf_New.get_view() #Works

x = Surf_New_View.raw  #Fails
print('done')

注意:经过进一步测试......其他一些旋转角度也可以工作,我循环了 360 个角度,大约有 17 个工作。我还尝试了 32 位 python 和几个版本。在进一步追踪之后,我相信这是一些我无法解决的低级数学问题......每当发生这种连续错误时,内置函数中也会引发异常......

特别是“{'ArithmeticError': , 'AssertionError': , 'AttributeError': , 'BaseException': , 'BlockingIOError': , 'BrokenPipeError': , 'BufferError': , 'BytesWarning': , 'ChildProcessError': , 'ConnectionAbortedError ': , 'ConnectionError': , 'ConnectionRefusedError': , 'ConnectionResetError': , 'DeprecationWarning': , ...}"

标签: pythonpygame

解决方案


所有这些问题都解决了。我不知道为什么它会对旋转/get_view 功能产生影响,但是在加载图像时,您必须使用 convert_alpha。这是可选的,不知道为什么它可以解决这个问题,但确实可以。

pg.image.load('C:/TimW/Tmp_Images/Test3.png').convert_alpha()


推荐阅读