2016-09-16 3 views

Répondre

3

La méthode surface.get_at est correcte. Voici un exemple montrant la différence lors de la fusion d'une image sans canal alpha.

import sys, pygame 
pygame.init() 
size = width, height = 320, 240 
screen = pygame.display.set_mode(size) 
image = pygame.image.load("./img.bmp") 
image_rect = image.get_rect() 

screen.fill((0,0,0)) 
screen.blit(image, image_rect) 
screensurf = pygame.display.get_surface() 

while 1: 

    for event in pygame.event.get(): 
    if event.type == pygame.MOUSEBUTTONDOWN : 
     mouse = pygame.mouse.get_pos() 
     pxarray = pygame.PixelArray(screensurf) 
     pixel = pygame.Color(pxarray[mouse[0],mouse[1]]) 
     print pixel 
     print screensurf.get_at(mouse) 

    pygame.display.flip() 

Ici, en cliquant sur un pixel rouge donnera:

(0, 254, 0, 0) 
(254, 0, 0, 255) 

Le PixelArray retourne une composante de couleur 0xAARRVVBB, alors que vous attendez couleur 0xRRGGBBAA. Notez également que le canal alpha de la surface de l'écran est 255.

+0

+1 Bonne réponse! Juste deux choses: vous mentionnez 'surface.getAt' et utilisez' surface.get_at'. Cela pourrait être déroutant. Deuxièmement, vous utilisez une variable indéfinie 'e' dans la fonction' pygame.display.flip'. Je ne suis pas sûr de ce qu'il est censé être et puisque c'est à quelques caractères à changer je ne peux pas le modifier moi-même. –