Как я могу редактировать отдельные пиксели в окне? - PullRequest
2 голосов
/ 25 июня 2010

Я хочу создать простой рендерер видео, чтобы поиграть, и делать такие вещи, как создание мобильной ОС для развлечения. Мой отец сказал мне, что на самых первых компьютерах вы редактируете определенный адрес памяти, и экран обновляется. Я хотел бы смоделировать это внутри окна в Windows. Есть ли способ сделать это с помощью C #?

Ответы [ 2 ]

4 голосов
/ 25 июня 2010

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

Для записи в резервные буферы с использованием C # мой любимый метод - использовать WPF WritableBitmap . Я также использовал System.Drawing.Bitmap для обновления экрана путем записи в него пикселей через LockBits .

2 голосов
/ 25 июня 2010

Это полнофункциональная тема, которая выходит за рамки (она не подходит, не то, что я не буду болтать об этом часами :-) этого ответа ... но это должно помочь вам начать рисование в C #

http://www.geekpedia.com/tutorial50_Drawing-with-Csharp.html

С давних времен манипуляций с памятью произошли некоторые вещи ... хотя все еще связано с пикселями.

Редактировать: О, и если у вас возникнут проблемы с мерцанием и вы застряли, напишите мне, и я пришлю вам панель DoubleBuffered для рисования.

...