PyGame в MacOSX: CGContextDrawImage: недопустимый контекст 0x0

#python #pygame #cgcontext #cgcontextdrawimage

#python #pygame #cgcontext #cgcontextdrawimage

Вопрос:

Недавно я начал использовать PyGame для разработки простой программы, которая показывает изображение, но я столкнулся с проблемой, из-за которой я не могу загружать изображения с большим количеством цветов (?). Во время моих первых тестов я использовал некоторые изображения с сегментацией по истине, поэтому все они были черными и двухцветными, разграничивающими сегментированную часть изображения. Когда я попытался нарисовать реальное изображение, оно отображало черное изображение и следующую ошибку в терминале:

 Oct 24 00:50:08  python[4371] <Error>: CGBitmapContextInfoCreate: CGColorSpace does't support output
Oct 24 00:50:08  python[4371] <Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
  

Я пытался искать в Интернете людей, которые сталкивались с этой проблемой, но все, что я смог найти, это людей, у которых проблема с недопустимым контекстом в XCode (который я не использую).

Ради этого, вот простой код, который я написал, никакой тайны:

     import pygame
    import glob
    import os

    pygame.init()
    screen = pygame.display.set_mode((640, 640))

    imageName = '2.png'
    myimage = pygame.image.load(imageName)
    imagerect = myimage.get_rect()


    while 1:
        screen.fill((255,0,255))
        screen.blit(myimage, imagerect)
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit(0) 
  

Я использую Python 2.7.12, OSX 10.12 Sierra и PyGame 1.9.2.

Редактировать: я только что попробовал с файлом PNG, который весь черный, и возникают те же ошибки. Я не знаю, что происходит.

Правка 2: Я попытался запустить пример кода PyGame, который загружает файл PNG и отображает его (pygame.examples.scaletest), и произошла та же ошибка, поэтому я предполагаю, что это проблема с обновлением Sierra.

Комментарии:

1. Опубликованный вами код работает для меня на Sierra с использованием python 2.7.12, установленного из brew, в сочетании с sudo python -m pip install pygame и brew install libpng

2. @user2588654 Какое изображение вы пытались использовать на нем? У меня работает только несколько картинок, может быть, вам повезло. Я уже обновил свой python. Спасибо!

3. Я попробовал это с этим онлайн-изображением логотипа python, и это сработало. Возможно, предоставьте ссылку на изображение, которое не подходит для вас, и я смогу его протестировать. Кроме того, вы пробовали вызывать pygame.image.load(imageName).convert() or .convert_alpha() вместо этого? Не уверен, поможет ли это, но это действительно улучшает производительность blit.

Ответ №1:

В дополнение к удалению pygame мне также пришлось удалить следующее:

brew uninstall sdl sdl_image sdl_mixer sdl_ttf smpeg portmidi

Затем переустановите:

brew install sdl sdl_image sdl_mixer sdl_ttf smpeg portmidi

Затем после:

python -m pip install pygame

Он снова начал работать.

Комментарии:

1. Спасибо! Сработало для меня 🙂 Возникли проблемы с logstalgia при рендеринге цветных шариков, представляющих запросы.

Ответ №2:

У меня была такая же проблема после обновления до Sierra. Моим решением было удалить и переустановить PyGame.

Ответ №3:

У меня такая же проблема в Sierra для python3.

  • Во-первых, я обновился с 3.5 до 3.6.1.
  • Во-вторых, я понизил версию pygame.
  • Удалить pip3 удалить pygame ==> Удалить 1.9.4
  • Установить pip3 установить pygame ==> Установить 1.9.3