2016-11-15 1 views
2

Ja, ich weiß, dass es einen anderen Beitrag gibt, der das fragt, aber ich habe versucht, die Antwort darin, und es hat nicht funktioniert, es machte es nur noch schlimmer. Hier sind alle Beiträge, die ich versucht habe:pygame.display.set_icon() behandelt Transparenz nicht zu gut

PyGame: Applying transparency to an image with alpha?

Pygame.display.set_icon unable to show transparecy

How do I set a transparent icon?

Und mein Ergebnis von dem Versuch, Transparenz zu verwenden, als sie WAY anders war. Hier ist mein 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()) 

und hier ist das Ergebnis:

enter image description here

Hier ist das Original-Bild:

enter image description here

Jede Hilfe?

EDIT: Ich tat, was @ user2588654 sagte:

die oben gegeben, mein Vorschlag wäre, ohne Transparenz mit einem weißen Hintergrund remaking das Herz bei 32x32 Pixel, um zu versuchen und die colorkey anzuwenden. Lassen Sie mich wissen, ob das hilft!

Und hier ist mein 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) 

Hier ist die neue icon.png:

enter image description here

Und hier ist das Ergebnis:

enter image description here

Obwohl es nicht viel ist, ist es immer noch ein bisschen nervig. Wenn es nicht möglich ist, das zu beheben, ist das in Ordnung, und wenn es ist, dann würde ich es gerne wissen.

+0

Vielleicht duplizieren mit ["PyGame: Transparenz auf ein Bild mit Alpha anwenden?"] (Http://stackoverflow.com/questions/12879225/pygame-applicing-transparency-to-an-image-with-alpha). –

+1

Das ist der, den ich in der Post erwähnt habe. Ich habe es angesehen und es hat nicht funktioniert ... – DePianoman

+0

Ok, könnten Sie Ihre Frage bearbeiten und den Link zu diesem Beitrag hinzufügen? –

Antwort

1

Ihr Code ist in Ordnung. Wenn ich es mit Ihrem Test-Herzbild ausgeführt habe, habe ich die folgende Testwarnung in meiner Eingabeaufforderung erhalten: libpng warning: iCCP: known incorrect sRGB profile. Nach dem Ratschlag here, konvertierte ich es mit Bildmagie und das wurde der Fehler los, aber es sah immer noch wie Ihr Screenshot aus, also ist dies wahrscheinlich nicht so wichtig.

Nach der pygame Dokumentation zu diesem here für pygame.display.set_icon(), es sieht aus wie die meisten Systeme ein kleineres Bild wollen um 32x32 Pixel. Wenn Sie das Bild auf diese Größe skalieren, werden die meisten Artefakte auf dem Bild entfernt. Dies ist jedoch nicht ideal, da Ihr Herz Pixel-Art mit etwa 20x20 Pixeln ist. Darüber hinaus sieht es aus wie Symbole in Pygame nicht vollständige Transparenz unterstützen, sondern stattdessen nur Colorkey unterstützen. Das heißt, Sie wählen grundsätzlich eine Farbe aus, die als vollständig transparent festgelegt werden soll, indem Sie aufrufen, wobei surf auf Ihre Symbolbildoberfläche nach pygame.image.load("icon.png").convert_alpha() verweist. In meinem Beispiel bezieht sich das Tupel (255, 255, 255) auf eine weiße Farbe.

Angesichts der oben genannten, wäre mein Vorschlag zu versuchen, das Herz bei 32x32 Pixel mit einem weißen Hintergrund ohne Transparenz neu zu erstellen und die Farbschlüssel anwenden. Lassen Sie mich wissen, ob das hilft!

+0

Es hat geholfen, aber es ist immer noch ein wenig glitschig. Wie in meinem Post gesagt, wenn es keine Lösung gibt, dann ist das in Ordnung, aber wenn es da ist, würde ich es gerne wissen. – DePianoman

+0

Wenn Sie die Ergebnisse in Ihrer Frage betrachten, sieht es so aus, als würde pygame die RGB-Werte der benachbarten Pixel linear interpolieren, was zu diesen schwarzen Punkten führt. Nach dem Anschauen der Dokumentation bin ich mir nicht sicher, wie ich das leider deaktivieren kann. – CodeSurgeon

+0

Eine Idee, die Sie verwenden können, um das Problem zu mildern, besteht darin, Ihrer Zeichnung "Antialiasing" hinzuzufügen, indem Sie an den Rändern Ihres Herzens dunkelrote Pixel hinzufügen, um es glatter zu machen. Es löst das Problem nicht wirklich, aber macht die großen schwarzen Pixel etwas weniger offensichtlich. Das ist wirklich frustrierend, aber ... – CodeSurgeon