简体   繁体   English

在pygame中以数组的形式获取屏幕某部分的RGB像素数据

[英]Get RGB pixel data of a section of a screen as an array in pygame

My code allows a user to draw on a section of a pygame screen.我的代码允许用户在 pygame 屏幕的一部分上绘图。 I want to be able to extract all the RGB pixel values for this section of the screen and convert them to a 3d array, like this:我希望能够提取屏幕这一部分的所有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]

What's the best way to do this?做到这一点的最佳方法是什么?

Create a subsurface from the section of the screen.从屏幕部分创建一个次表面。 A subsurface shares its pixels with its new parent (see pygame.Surface.subsurface ):次表面与其新父级共享其像素(请参阅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)

Use pygame.surfarray.array3d() to copy the pixels from a Surface into a 3D array:使用pygame.surfarray.array3d()将像素从Surface复制到 3D 数组中:

pixel_data = pygame.surfarray.array3d(sub_surface)

Minimal function:最小功能:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM