我目前有一些使用 pycairo 绘制并通过 PyGame 呈现到 SDL 表面的代码。这在 Linux 和 Windows 上运行良好,但 Mac 让我头疼。一切都只是蓝色或粉红色字节顺序似乎是 BGRA 而不是 ARGB,我尝试使用 pygame.Surface.set_masks 和 set_shifts 无济于事。这仅在 mac (osx 10.6) 上被破坏:
import cairo
import pygame
width = 300
height = 200
pygame.init()
pygame.fastevent.init()
clock = pygame.time.Clock()
sdl_surface = pygame.display.set_mode((width, height))
c_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
ctx = cairo.Context(c_surface)
while True:
pygame.fastevent.get()
clock.tick(30)
ctx.rectangle(10, 10, 50, 50)
ctx.set_source_rgba(0.0, 0.0, 0.0, 1.0)
ctx.fill_preserve()
dest = pygame.surfarray.pixels2d(sdl_surface)
dest.data[:] = c_surface.get_data()
pygame.display.flip()
我可以通过阵列切片或使用 PIL 来修复它,但这会降低我的帧速率。有没有办法就地或通过设置做到这一点?