gpt4 book ai didi

Pygame,将屏幕复制到数组中

转载 作者:行者123 更新时间:2023-12-05 02:19:28 27 4
gpt4 key购买 nike

在 pygame 中如何将屏幕内容放入数组中?我已经从文档中尝试过这个:

self.screen.lock()
tmp_frame = pygame.surfarray.array3d(self.screen)
self.screen.unlock()

我尝试了各种方法,例如使用 pixelcopy 先获取表面的副本,但我总是遇到段错误。

Fatal Python error: (pygame parachute) Segmentation Fault Aborted (core dumped)

是因为我想直接从屏幕上复制吗?这是屏幕包含的内容:

self.screen  = pygl2d.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT), pygame.DOUBLEBUF, depth=24)

这是 set_mode 的定义:

def set_mode(resolution=(0,0), flags=0, depth=0):
flags |= pygame.OPENGL
screen = pygame.display.set_mode(resolution, flags, depth)
init_gl()
return screen

编辑跟进:

我还尝试先将屏幕表面复制到另一个表面

tmp_surface= self.screen.copy()

但是我明白了

pygame.error: Cannot copy opengl display

所以真的,我想问题是如何将这个 opengl 显示内容复制到一个数组中?

最佳答案

对于可能遇到类似情况的任何人:我无法找到直接的解决方案,所有访问硬件加速表面的方法都会导致段错误。 (array3d、array2d、访问引用数组 pixels3d 等)。

不过,我想出了一个解决方法。看来您可以使用

保存图像
pygame.image.save(self.screen, 'output.png')

同样,你可以这样做

string_image = pygame.image.tostring(self.screen, 'RGB')
temp_surf = pygame.image.fromstring(string_image,(self.SCREEN_WIDTH, self.SCREEN_HEIGHT),'RGB' )
tmp_arr = pygame.surfarray.array3d(temp_surf)

这应该为您提供屏幕内容的 numpy 数组。

关于Pygame,将屏幕复制到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com