2016-11-15 2 views
2

Oui, je sais qu'il ya un autre poste demander, mais j'ai essayé la réponse à cela, et il ne fonctionne pas, il vient de faire empirer les choses. Voici tous les postes que j'ai essayé:pygame.display.set_icon() ne gère pas la transparence trop

PyGame: Applying transparency to an image with alpha?

Pygame.display.set_icon unable to show transparecy

How do I set a transparent icon?

Et mon résultat d'essayer d'utiliser la transparence était de façon différente qu'eux. Voici mon code:

import pygame 

pygame.init() 

screen = pygame.display.set_mode((800,600)) 
pygame.display.set_caption("Undertale") 
pygame.display.set_icon(pygame.image.load("icon.png").convert_alpha()) 

et voici le résultat:

enter image description here

Voici l'image originale:

enter image description here

Toute aide?

EDIT: Je fait ce que @ user2588654 dit:

Compte tenu de ce qui précède, ma suggestion serait d'essayer de refaire le cœur à 32x32 pixels avec un fond blanc sans transparence et appliquer la colorkey. Faites-moi savoir si cela aide!

Et voici mon code:

import pygame 

pygame.init() 

screen = pygame.display.set_mode((800,600)) 
pygame.display.set_caption("Undertale") 
icon = pygame.image.load("icon.png") 
icon.set_colorkey((0,255,0)) 
pygame.display.set_icon(icon) 

Voici la nouvelle icon.png:

enter image description here

Et voici le résultat:

enter image description here

Bien que ce ne soit pas beaucoup, c'est quand même un peu énervant. Si ce n'est pas possible, c'est bien, et si c'est le cas, j'aimerais le savoir.

+0

Peut-être dupliquer avec ["PyGame: Appliquer la transparence à une image avec alpha?"] (Http://stackoverflow.com/questions/12879225/pygame-applying-transparency-to-an-image-with-alpha). –

+1

C'est celui que j'ai mentionné dans le post. Je l'ai vu et cela n'a pas fonctionné ... – DePianoman

+0

Ok, pourriez-vous éditer votre question et ajouter le lien à cet article? –

Répondre

1

Votre code fonctionne très bien. Lorsque je l'ai exécuté avec votre image de test du cœur, j'ai reçu l'avertissement de test suivant dans mon invite de commande: libpng warning: iCCP: known incorrect sRGB profile. Suite au conseil here, je l'ai converti en utilisant image magick et cela s'est débarrassé de l'erreur, mais il ressemblait encore à votre capture d'écran, donc ce n'est probablement pas trop important.

Selon la documentation pygame sur ce here pour pygame.display.set_icon(), il semble que la plupart des systèmes veulent une image plus petite autour pixels 32x32. Redimensionner votre image à cette taille a supprimé la plupart des artefacts sur l'image, mais ce n'est pas idéal puisque votre coeur est pixel art autour de 20x20 pixels. De plus, il ressemble à des icônes dans pygame ne prennent pas en charge la transparence complète, mais le soutien que de colorkey. En d'autres termes, vous choisissez une couleur pour qu'elle soit complètement transparente en appelant surf.set_colorkey((255, 255, 255)), où surf fait référence à la surface de l'image de votre icône après pygame.image.load("icon.png").convert_alpha(). Dans mon exemple, le tuple (255, 255, 255) fait référence à une couleur blanche.Compte tenu de ce qui précède, ma suggestion serait d'essayer de refaire le coeur à 32x32 pixels avec un fond blanc sans transparence et appliquer la clé de couleur. Faites-moi savoir si cela aide!

+0

Ça m'a aidé, mais c'est quand même un peu gluant. Comme dit dans mon post, s'il n'y a pas de solution, alors c'est bien, mais s'il y a, j'aimerais savoir s'il vous plaît. – DePianoman

+0

En regardant les résultats dans votre question, il semble que pygame interpole linéairement les valeurs RVB des pixels adjacents, résultant en ces points noirs. Après avoir regardé la documentation, je ne suis pas sûr de savoir comment désactiver cela malheureusement. – CodeSurgeon

+0

Une idée que je suppose que vous pouvez utiliser pour atténuer le problème est d'ajouter "antialiasing" à votre dessin en ajoutant des pixels rouges foncés le long des frontières de votre coeur pour le rendre plus lisse. Cela ne résout pas vraiment le problème mais rend les grands pixels noirs légèrement moins évidents. C'est vraiment frustrant ... – CodeSurgeon