Как сделать снимок экрана всего дисплея pygame

Я создаю программу для рисования и хочу, чтобы пользователь мог сохранить свое изображение после его создания, поэтому я попробовал pygame.image.save(pygame.display.get_surface(), "/home/user/screenshot.png"). Я сделал быстрый рисунок и нажал заданную мной кнопку, которая сохранит изображение. Я смотрю на изображение, и на нем сохраняется только пустая поверхность дисплея, а не pygame.draw.rect()с фактического рисунка. Я просмотрел следующие ссылки: Как сделать снимок экрана pygame? https://gamedev.stackexchange.com/questions/118372/how-can-i-take-a-screenshot-of-a-termin-part-of-the-screen-in-pygame Может ли python получить снимок экрана определенного окна? и многое другое. Как сделать снимок всего экрана дисплея вместе с рисунком? Это мой основной цикл:

running = True
while running:
    updateWindow() # Updates window
    clearWindow() # Clears window
    checkEvents() # Checks events
    redrawItems() # Redraws your drawing
    pygame.event.pump()
pygame.display.quit()
pygame.quit()

person BoxifyMC    schedule 10.08.2020    source источник
comment
повторяющийся вопрос: как принимать снимок экрана всей отображаемой игры   -  person Yax P.    schedule 11.08.2020
comment
Это буквально этот вопрос, Якс П.   -  person BoxifyMC    schedule 11.08.2020


Ответы (2)


Попробуйте pygame.Surface.copy на поверхности дисплея. См. Документы здесь.

Итак, если display - ваш экран, тогда:

screencopy = display.copy()

должен предоставить вам копию отображаемого изображения в screencopy. Помните, что из-за двойной буферизации он даст вам копию того, что вы бы увидели на экране, если бы вы сделали display.update() прямо тогда, что может отличаться от того, что отображается на экране, если вы сделали то, что еще не было отправлено. экран еще не update().

person Glenn Mackintosh    schedule 10.08.2020

Вы можете сделать это с помощью pygame.image.save (Surface, filename), о котором вы можете узнать больше о здесь

Ниже приведена простая функция, которая сохранит часть дисплея как изображение.

def Capture(display,name,pos,size): # (pygame Surface, String, tuple, tuple)
    image = pygame.Surface(size)  # Create image surface
    image.blit(display,(0,0),(pos,size))  # Blit portion of the display to the image
    pygame.image.save(image,name)  # Save the image to the disk**

Эта функция создает поверхность pygame с именем image. Затем область (позиция, размер) копируется для изображения в ее исходной точке. Наконец, вызывается pygame.image.save (поверхность, имя файла) и сохраняет изображение на диск.

Например, если мы хотим сохранить изображение размером 100x100 с именем Capture.png в позиции 50x50 на дисплее, имя будет равно Capture.png, pos будет равно (50,50), а размер будет равен (100,100), а функция вызов будет выглядеть так:

Capture(display,"Capture.png",(50,50),(100,100))
person Arunph    schedule 10.08.2020