442 368 сложений и 884 736 умножений для расчета, я бы подумал, что 11 мс на современном процессоре чрезвычайно медленные.
хотя я не знаю много о специфике .net, я знаю, что высокоскоростной расчет не является сильной стороной. В прошлом я создавал Java-приложения с похожими проблемами, я всегда использовал библиотеки C для обработки изображений / аудио.
исходя из аппаратной точки зрения, вы хотите убедиться, что доступ к памяти является последовательным, то есть пошагово проходит через буфер в том порядке, в котором он существует в памяти. вам также может понадобиться изменить порядок так, чтобы компилятор использовал доступные инструкции, такие как SIMD. Как это сделать, в конечном итоге будет зависеть от вашего компилятора, и я не могу помочь с vs.net.
на встроенном DSP я бы вырвался
(AlphaImageData [x, y] * OneMinusAlphaValue) и (CurrentImageData [x, y] * AlphaValue) и использовать инструкции SIMD для вычисления буферов, возможно, параллельно перед выполнением сложения. возможно, делать достаточно маленькие куски, чтобы сохранить буферы в кэше процессора.
Я считаю, что все, что вы делаете, потребует более прямого доступа к памяти / процессору, чем позволяет .net.