Функции наложения 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%.