获取屏幕部分的 RGB 像素数据作为 pygame 中的数组
Get RGB pixel data of a section of a screen as an array in pygame
我的代码允许用户在 pygame 屏幕的一部分上绘图。我希望能够提取屏幕这一部分的 所有 RGB 像素值并将它们转换为 3d 数组,如下所示:
top_left = [50, 50]
bottom_right = [100, 100]
pixel_data = SomeFunctionToGetPixelData(screen, top_left, bottom_right)
# get RGB value for pixel that was at position (53, 51) on the screen
print(pixel_data[3][1])
> [255, 255, 255]
最好的方法是什么?
从屏幕部分创建一个次表面。次表面与其新父级共享其像素(参见 pygame.Surface.subsurface
):
w = bottom_right[0] - top_left[0]
h = bottom_right[1] - top_left[1]
area = pygame.Rect(top_left[0], top_left[1], w, h)
sub_surface = screen.subsurface(area)
使用 pygame.surfarray.array3d()
将像素从 Surface 复制到 3D 数组中:
pixel_data = pygame.surfarray.array3d(sub_surface)
最小函数:
def get_pixel_data(surf, top_left, bottom_right):
w = bottom_right[0] - top_left[0]
h = bottom_right[1] - top_left[1]
sub_surface = surf.subsurface(pygame.Rect(*top_left, w, h))
return pygame.surfarray.array3d(sub_surface)
我的代码允许用户在 pygame 屏幕的一部分上绘图。我希望能够提取屏幕这一部分的 所有 RGB 像素值并将它们转换为 3d 数组,如下所示:
top_left = [50, 50]
bottom_right = [100, 100]
pixel_data = SomeFunctionToGetPixelData(screen, top_left, bottom_right)
# get RGB value for pixel that was at position (53, 51) on the screen
print(pixel_data[3][1])
> [255, 255, 255]
最好的方法是什么?
从屏幕部分创建一个次表面。次表面与其新父级共享其像素(参见 pygame.Surface.subsurface
):
w = bottom_right[0] - top_left[0]
h = bottom_right[1] - top_left[1]
area = pygame.Rect(top_left[0], top_left[1], w, h)
sub_surface = screen.subsurface(area)
使用 pygame.surfarray.array3d()
将像素从 Surface 复制到 3D 数组中:
pixel_data = pygame.surfarray.array3d(sub_surface)
最小函数:
def get_pixel_data(surf, top_left, bottom_right):
w = bottom_right[0] - top_left[0]
h = bottom_right[1] - top_left[1]
sub_surface = surf.subsurface(pygame.Rect(*top_left, w, h))
return pygame.surfarray.array3d(sub_surface)