在OS X上使用Pygame进行抗锯齿的错误颜色

use*_*504 5 macos drawing pygame antialiasing

我在运行OS X的Macbook Pro(非视网膜)上使用Pygame.当我尝试创建抗锯齿线或圆圈时,它似乎是错误的颜色.这是一个例子:

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()
Run Code Online (Sandbox Code Playgroud)

这导致:

颜色的例子

Jun*_*uxx 4

尽管搜索了 pygame 源代码,但仍无法找到原因。

不过,我确实想出了一个解决方法。实际上是两个。

模块中似乎存在一个错误pygame.gfxdraw,当蓝色值为 0 时,会导致 OS X 中的颜色混乱。如果将蓝色值更改black为 (0,0,1),圆圈看起来会好得多,但仍然有轻微的蓝色调。将其更改为 (0,0,2),它会显示几乎全黑。对我来说没什么意义,但它有效。

编辑:这适用于不包含任何蓝色的背景颜色。看来,在包含 >0 蓝色的背景 RGB 上,圆圈至少需要一定量的蓝色才能防止出现错误。例如,要在 (50,50,50) 背景上获得黑色圆,我能得到的最接近的结果是使用 (0,0,50) 作为圆。任何较低量的蓝色都会导致亮蓝色伪影。

pygame.draw.aaline不过,添加蓝色对于修复 的行为没有帮助。这一定是一个单独的错误。不过,pygame.gfxdraw.line也是抗锯齿的。使用该方法,更改green为 (0,255,1),青色线现在将变为绿色。

在此输入图像描述