Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему скрин-шот сделанный в pyautogui невозможно сделать blit() в pygame python

Desvor Di Ученик (217), на голосовании 2 месяца назад
Код:

 import pygame 
import pyautogui as pag

screenshot = pag.screenshot()

pygame.font.init()
pygame.init()

screen = pygame.display.set_mode((0, 0), pygame.NOFRAME)
pygame.display.set_caption("Hello World!")

print(screenshot)

run = True
while run:

# screen.fill((0, 0, 0))

frame_surface = pygame.surfarray.make_surface(screenshot)
screen.blit(frame_surface, (0, 0))

pygame.draw.rect(screen, (255, 255, 255), (100, 100, 100, 100))

f1 = pygame.font.Font(None, 36)
text1 = f1.render(f'TeSt', True, (255, 255, 255))
screen.blit(text1, (100, 50))


pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False

Данный код даёт при запуске:

 expected a tuple for 'data' 
File "D:\main2.py", line 19, in
frame_surface = pygame.surfarray.make_surface(screenshot)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: expected a tuple for 'data'

Как сделать так чтобы код работал?
Голосование за лучший ответ
Максим Харламов Мыслитель (6320) 3 месяца назад
Камшот экрана попробуй сделать
Desvor DiУченик (217) 3 месяца назад
Скрин шот
^^^^^^
Screen = Экран

Кам шот
^^^^
Cam (camera) = Камера
Desvor Di Ученик (217) Desvor Di, И зачем мне делать снимок камеры?
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (158632) 3 месяца назад
`pyautogui.screenshot()` возвращает объект типа `PIL.Image.Image`, а `pygame.surfarray.make_surface()` ожидает массив данных, который можно использовать для создания поверхности. Для этого необходимо преобразовать изображение из PIL в формат, который понимает Pygame.

  
import pygame
import pyautogui as pag
import numpy as np

# Получаем скриншот и конвертируем его в формат, который понимает Pygame
screenshot = pag.screenshot()
screenshot_rgb = screenshot.convert('RGB')
screenshot_array = np.array(screenshot_rgb)

pygame.font.init()
pygame.init()

screen = pygame.display.set_mode((screenshot.size), pygame.NOFRAME)
pygame.display.set_caption("Hello World!")

run = True
while run:
frame_surface = pygame.surfarray.make_surface(screenshot_array)
screen.blit(frame_surface, (0, 0))

pygame.draw.rect(screen, (255, 255, 255), (100, 100, 100, 100))

f1 = pygame.font.Font(None, 36)
text1 = f1.render(f'TeSt', True, (255, 255, 255))
screen.blit(text1, (100, 50))

pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
Похожие вопросы