Ich verwende derzeit XNA 3.1 mit vormultipliziertem Alpha (native Unterstützung für vormultipliziertes Alpha wurde in 4.0 hinzugefügt).
Meistens spart es mir Zeit, durchzugehen und sicherzustellen, dass die transparenten Bereiche meiner Bilder die richtigen Farben haben. Ich portiere auch auf Silverlight, das standardmäßig eine Vormultiplikation durchführt.
XNA verfügt über eine Inhaltspipeline, die das Hinzufügen einer vormultiplizierten Alpha-Vorverarbeitung zum Kinderspiel macht .
Dieser Link enthält den Code für die Konvertierung. Für jedes Pixel:
c.R = (byte)(c.R * c.A / 255);
c.G = (byte)(c.G * c.A / 255);
c.B = (byte)(c.B * c.A / 255);
Es gibt viel zu sagen, wenn man eine Content-Pipeline hat. Wenn Sie nicht XNA verwenden, sondern Visual Studio verwenden, können Sie selbst eines zusammenwerfen . Alle anderen IDEs / Build-Prozesse sollten ebenfalls in der Lage sein.
Und schließlich, wenn Sie keinen Schritt zur Inhaltsverarbeitung in Ihrem Build haben (und wahrscheinlich ohnehin nicht viel Inhalt haben), können Sie die Vormultiplikation zur Laufzeit genauso einfach durchführen, wenn Sie Ihre Texturen laden. Dadurch wird die Ladezeit Ihrer Textur um einen konstanten Faktor erhöht.
(Wenn die Implikation nicht klar war: Sie sollten wahrscheinlich keine vormultiplizierten Alpha-Bilder bearbeiten. Exportieren Sie sie vormultipliziert, wenn Sie können, oder verarbeiten Sie sie besser noch vor.)