Раньше это делалось, потому что вы могли получить прямой доступ к видеобуферу. Обычно это недоступно в современных системах, поскольку видеопамять управляется видеодрайвером и ОС. Кроме того, на самом деле нет отображения 1: 1 буфера видеопамяти и того, что отображается больше. С таким большим объемом доступной памяти стало возможным иметь несколько буферов и переключаться между ними. Отображаемый в данный момент буфер называется «фронтальным буфером», а другие, не отображаемые буферы называются «обратными буферами» (подробнее см. http://en.wikipedia.org/wiki/Multiple_buffering).. Обычно мы выполняем запись в обратные буферы, а затем обновляем видеосистему фронт буфер для нас. Это обеспечивает плавные обновления, так как видеодрайвер синхронизирует обновление с частотой сканирования монитора.
Для записи в резервные буферы с использованием C # мой любимый метод - использовать WPF WritableBitmap . Я также использовал System.Drawing.Bitmap
для обновления экрана путем записи в него пикселей через LockBits .