Einige Farben aus der PNG-Textur in DirectX beim Laden und Speichern fehlen?

8

Ich verwende Standard-DirectX-Funktionen (wie CreateTexture2D , D3DX11SaveTextureToFile und D3DX11CreateShaderResourceViewFromFile ), um das PNG-Bild zu laden, es auf neu erstellte Texturen zu rendern und dann in Datei zu speichern. Alle Texturen haben die Stärke von zwei Größen.

Aber währenddessen habe ich bemerkt, dass einige Farben von PNG ein wenig beschädigt sind (ähnlich aber nicht die gleichen wie die Farben der Quelltextur). Das gleiche gilt für die Transparenz (funktioniert für Teile mit 0 und 100% Transparenz, aber nicht für beispielsweise 34%).

Gibt es große Farbannäherungen oder mache ich etwas falsch? Wenn ja, wie kann ich es lösen?

Hier sind diese zwei Bilder (links ist die Quelle: etwas andere Farben und etwas Transparenz am unteren Rand; rechts ist das Bild nach dem Laden des ersten Bildes und dem Rendern auf der neuen Textur, die dann in der Datei gespeichert wurde):

Ich weiß nicht, was dieses Verhalten verursacht, vielleicht die Beschreibung der neuen Textur:

%Vor%

Ich habe versucht, es in DXGI_FORMAT_R32G32B32A32_FLOAT zu ändern, aber der Effekt war noch seltsamer:

Hier ist der Code zum Rendern der Quelltextur auf der neuen Textur:

%Vor%

Und in object->render() :

%Vor%

Der Shader ist sehr einfach:

%Vor%

Für einige Optimierungen parse ich die Größe des Sprites als Parameter des Shaders (es funktioniert gut, die Größe der Textur, Ränder etc. sind richtig).

    
PolGraphic 06.01.2013, 17:55
quelle

2 Antworten

4

Haben Sie Blend-Zustände festgelegt? Alpha funktioniert standardmäßig nicht, da die Standardmischung keine Mischung ist.

Hier ist ein Standard-Alpha-Blend-Status:

%Vor%

Ich würde auch Clear mit Alpha-Komponente auf 1 statt 0 setzen

    
catflier 19.01.2013 18:10
quelle
2

Ich schlage vor, dass Ihre Probleme auf den Import einer Fireworks-PNG-Datei mit mehreren Ebenen zurückzuführen sind. Fireworks-Layer-PNGs behalten ihre Ebenen bei, wenn sie in andere Software wie Flash und Freehand importiert werden. Um jedoch eine mehrschichtige Fireworks-PNG-Datei in Photoshop exakt replizieren zu können, müssen Sie das geschichtete PNG als komprimiertes PNG exportieren. Daher ist es nicht die Lösung, sie in Photoshop zu öffnen und zu reduzieren. Die Lösung liegt darin, sie in Fireworks zu öffnen und zu glätten. (Hinweis: PNGs können 8, 24 oder 32-Bit sein ... vielleicht muss das in Ihrer Analyse berücksichtigt werden.)

    
whalesharkie 06.01.2013 18:24
quelle

Tags und Links