QuakeLight использует примерно следующее решение:
Вместо использования WriteableBitmap вы можете создать очень простой PNG-кодировщик (необработанный растровый рисунок, без сжатия, при необходимости используйте QuakeLight).Заполните обычный массив данными пикселей, закодируйте его как PNG в памяти, затем оберните его в MemoryStream и присоедините к изображению.Создание несжатого PNG в основном означает создание заголовка фиксированного размера перед вашим массивом.
Вы даже можете использовать очередь производителя-потребителя, чтобы вы могли построить свой PNG в отдельном потоке, позволяя вам использовать многоядерныйсистемы для лучшей производительности.
Надеюсь, это поможет.Поделитесь своим опытом, если попробуете этот метод.