Сложно сказать, но по виду - возможно, тормозит функция MakeColor16 и её вызов. Зачем там одни и те же касты выполняются дважды?
Да и само решение какое-то корявое - каждый пиксель менять. Хотя других я и не знаю.
Попробуй закомментить вызовы этой функции и посмотреть - меньше нагрузка стала?
Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...