Функции смешивания GDIPlus для эффективности используют предварительно умноженный канал RGB на альфа-битовые карты. Однако предварительное умножение на альфа очень затратно, так как вам нужно обрабатывать каждый пиксель один за другим.
Вроде бы хороший кандидат на сборку SSE. Есть ли здесь кто-нибудь, кто хотел бы поделиться его реализацией? Я знаю, что это тяжелая работа, поэтому и спрашиваю. Я не пытаюсь украсть твою работу. Вы получите все мое внимание, если поделитесь этим, если сможете.
Изменить: я не пытаюсь выполнять альфа-смешение программным обеспечением. Я пытаюсь предварительно умножить каждый цветовой компонент каждого пикселя изображения на его альфа-канал. Я делаю это, потому что альфа-смешение выполняется по формуле: dst = src src.alpha + dst (1-dst.alpha), однако функция AlphaBlend Win32 действительно реализует dst = src + dst ( 1-dst.alpha) для оптимизации. Чтобы получить правильный результат, вам нужно, чтобы src было равно src * src.alpha перед вызовом AlphaBlend.
Мне бы потребовалось немного времени, чтобы написать, поскольку я мало знаю о сборке, поэтому я спросил, не хочет ли кто-нибудь поделиться ее реализацией. SSE был бы великолепен, так как в статье выигрыш при альфа-смешивании программным обеспечением составляет 300%.