【问题标题】:Why is pygame.surface.get_view() failing only when the surface has been rotated?为什么 pygame.surface.get_view() 仅在表面旋转时才会失败?
【发布时间】:2020-04-14 00:53:16
【问题描述】:

将图像上传到表面并使用 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': , ...}"

【问题讨论】:

  • 您的代码对我有效且没有错误 - LInux Mint、Python 3.7、PyGame 1.9.6。也许您在不同的代码位置有问题。或者这只是您的系统上的问题。始终显示有问题的完整错误消息(不在评论中)
  • 顺便说一句:对于变量使用lower_case_names 和仅对类使用UpperCaseNames 有很好的规则 - 它有助于识别代码中的类。查看更多:PEP 8 -- Style Guide for Python Code
  • 我忘记了有问题的行....见 x =
  • FYI - 我用大约 10 种不同的语言(包括数据库)进行编程,虽然 Python 的风格点很好,但我不是全职的 Python 开发人员,所以我使用了一种我发现跨语言最便携的风格.
  • 这不是我的代码......那只是为了测试......我在我的代码中使用了完全不同的格式...... clsClass、oObject 等......

标签: python pygame


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2018-06-05
    • 2021-06-29
    • 2016-05-06
    • 2022-06-18
    相关资源
    最近更新 更多