Как удалить элементы PixelArray - PullRequest
1 голос
/ 15 апреля 2020

В коде

import pygame
pygame.init()

window = pygame.display.set_mode((900,900))
img0 = pygame.image.load("assets/cat.jpg")

run = True
while run:
    pygame.display.flip()
    window.fill((255,255,255))

    window.blit(img0, (0,0))
    img0PA = pygame.PixelArray(img0)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                for c in range(len(img0PA)):
                    if c%2:
                        img0PA[c].pop()
                    else:
                        for r in range(len(img0PA[c])):
                            if r%2:
                                img0PA[c,r].pop()

    window.blit(img0PA.make_surface(), (len(img0PA),0))
    img0PA.close()

pygame.quit()

Я пытаюсь получить PixelArray из img0 и удалить каждую нечетную строку и столбец. Использование команды pop Компилятор запрашивает.

AttributeError: 'int' object has no attribute 'pop'

Как удалить все нечетные строки и столбцы с помощью модуля PixelArray?

1 Ответ

1 голос
/ 15 апреля 2020

Операция

img0PA[c,r].pop()

не имеет никакого смысла.

img0PA как на объекте класса pygame.PixelArray. Пиксельная матрица может быть проиндексирована как [column, row], таким образом, img0PA[c,r] возвращает один пиксель в виде интегрального значения. Метод .pop не определен для int.

A pygame.PixelArray используется для адресации и манипулирования пикселями pygame.Surface. Невозможно изменить размер поверхности, удалив строки и столбцы из массива пикселей.

Если вы хотите создать поверхность другого размера, вам необходимо создать новый pygame.Surface объект.
Вы можете использовать pygame.PixelArray для копирования отдельных пикселей с одной поверхности на другую поверхность.


Если вы хотите масштабировать Surface, то я рекомендую использовать pygame.transform.scale() или pygame.transform.smoothscale. Например:

window.blit(img0, (0,0))
img0Scaled = pygame.transform.scale(img0, (0.5, 0.5))
window.blit(img0Scaled, (img0Scaled.get_width(), 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...