2014-06-13 15 views
5

Używam Pygame na Macbook Pro (nie do siatkówki) z systemem OS X. Kiedy próbuję utworzyć linię lub okrąg antyaliasowy, wydaje się, że wychodzi jako niewłaściwy kolor . Oto przykład:Nieprawidłowe kolory wygładzania za pomocą Pygame na OS X

import sys, pygame, random, math 
import pygame.gfxdraw 

black = (0,0,0) 
white = (255, 255, 255) 
green = (0, 255, 0) 


pygame.init() 

size = width, height = 800, 600 

screen = pygame.display.set_mode(size) 

# make the background 
background = pygame.Surface(screen.get_size()) 
#background.fill(black) 
background.fill(white) 

while 1: 
    # handle single events 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: sys.exit() 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: sys.exit() 

    screen.blit(background, (0, 0)) 

    pygame.draw.line(screen, green, [0, 0], [50,30], 1) 
    pygame.draw.aaline(screen, green, [0, 50],[50, 80], True) 

    pygame.draw.circle(screen, black, [100, 100], 10) 
    pygame.gfxdraw.aacircle(screen, 100, 130, 10, black) 

    pygame.display.flip() 

Która prowadzi do:

color example

Odpowiedz

4

nie udało się znaleźć przyczynę tego mimo przeszukiwania kodu źródłowego pygame.

Udało mi się wymyślić obejście problemu. Dwie właściwie.

Wygląda na to, że w module pygame.gfxdraw występuje błąd, który powoduje, że kolory są pomieszane w systemie OS X, gdy wartość niebieskiego wynosi 0. Jeśli zmienisz swój black na (0,0,1), okrąg będzie już wyglądają znacznie lepiej, ale nadal mają lekko niebieskawy odcień. Zmień go na (0,0,2) i będzie wyglądał niemal całkowicie na czarno. Nie ma dla mnie sensu, ale działa.

Edytuj: To dla kolorów tła, które nie zawierają niebieskiego. Wygląda na to, że na tle RGB zawierających> 0 niebieski, koło potrzebuje co najmniej takiej ilości niebieskiego, aby zapobiec błędowi. Na przykład, aby uzyskać czarną aacircle na (50, 50, 50) tle, najbliższym, co udało mi się uzyskać, było użycie (0,0,50) dla koła. Każda mniejsza ilość niebieskiego spowoduje jasne niebieskie artefakty.

Dodanie niebieskiego nie pomaga w naprawieniu zachowania pygame.draw.aaline. To musi być osobny błąd. Jednak pygame.gfxdraw.line jest również wygładzany. Użyj tej metody, zmień green na (0,255,1), a linia cyjan będzie teraz zielona.

enter image description here

+0

Dziękuję, to jest bardzo pomocne! – user2171504