Как получить цвет каждого пикселя на экране в PyGame - PullRequest
3 голосов
/ 06 ноября 2019

Я хотел бы получить массив, который будет состоять из RGBA-кода каждого пикселя на дисплее пигмеи

Я попытался это сделать:

for i in range(SCREEN_WIDTH):
    for j in range(SCREEN_HEIGHT):
        Pixels.append(pygame.Surface.get_at((i, j)))

Но я получил сообщение об ошибке, что Surface.get_at не работает для кортежей, поэтому я удалил один набор скобок, а затем он сказал мне, что Surface.get_at не работает с целыми числами, поэтому я запутался, как я могу получить значение RGBA для всех пикселей? Спасибо

РЕДАКТИРОВАТЬ , хорошо, после комментария я выкладываю полный исполняемый код:

import pygame
pygame.init()
PPM = 15
SCREEN_WIDTH, SCREEN_HEIGHT = 640, 480
pos_X = SCREEN_WIDTH/PPM/3
pos_Y = SCREEN_HEIGHT/PPM/3
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
FPS = 24
TIME_STEP = 1.0 / FPS
running = True

lead_x = pos_X*PPM
lead_y = pos_Y*PPM

k = 0
Pixels = []
while running:
    screen.fill((255, 255, 255, 255))
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key == K_ESCAPE:
            running = False

    if k == 0:
        for i in range(SCREEN_WIDTH):
            for j in range(SCREEN_HEIGHT):
                Pixels.append(pygame.Surface.get_at((i, j)))

        k +=1

    pygame.draw.rect(screen, (128,128,128),  [lead_x, lead_y,50,50])

    pygame.display.update()
    pygame.display.flip() # Update the full display Surface to the screen
    pygame.time.Clock().tick(FPS)

pygame.quit()

И я получил именно эту ошибку, ни меньше, ни больше:

Exception has occurred: TypeError
descriptor 'get_at' for 'pygame.Surface' objects doesn't apply to 'tuple' object

1 Ответ

3 голосов
/ 06 ноября 2019

.get_at - это метод функции экземпляра (см. Объекты метода ) из pygame.Surface. Поэтому он должен быть вызван для экземпляра pygame.Surface. screen - это объект Surface, который представляет окно. Так должно быть:

Pixels.append(pygame.Surface.get_at((i, j)))

Pixels.append(screen.get_at((i, j)))

соответственно

Pixels.append(pygame.Surface.get_at(screen, (i, j)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...