Comment puis-je obtenir les valeurs de couleur des pixels d'une image qui est appliquée sur une surface de polygone? L'utilisation de Surface.get_at() renvoie uniquement la couleur du calque de surface et non l'image qui a été fusionnée dessus.Obtenir la couleur de pixels individuels d'images dans pygame
Répondre
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.
+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. –
veuillez fournir un échantillon de votre code – Flint