Используя метод CreateGraphics (), это должно работать:
Bitmap b = new Bitmap(Width, Height, this.CreateGraphics());
//pixel is:
Color c = b.GetPixel(x, y);
Чтобы установить пиксель для определенного цвета, используйте это вместо Color c = b.GetPixel(x,y)
:
b.SetPixel(x, y, c); // where c is a Color
Если вам нужен видовой экран, поместите панель или PictureBox (возможно, с Dock: Fill), затем используйте:
Bitmap b = new Bitmap(viewport.Width, viewport.Height, viewport.CreateGraphics());
вместо первой строки, использованной ранее.
Но из того, что вы хотите сделать, я думаю, что было бы лучше использовать событие OnPaint:
void pnlViewport_Paint(object sender, PaintEventArgs e) {
if ( e.ClipRectange.Width < 1 || e.ClipRectangle.Height < 1 ) return;
Bitmap b = new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height, e.Graphics);
// ...
}
Это событие срабатывает каждый раз, когда необходимо нарисовать элемент управления. Первая строка проверяет, является ли рисуемая область пустой - это не только сэкономит процессорное время, но и может привести к сбою вашего приложения - вы получаете его для создания растрового изображения 0x0.
РЕДАКТИРОВАТЬ : Да, это можно изменить, если Dock = DockStyle.Fill; По мере изменения размера вашего окна элемент управления расширяется, чтобы заполнить пространство. Затем перекрашивается - стреляет в событие.
РЕДАКТИРОВАТЬ 2 : Как отмечалось другими, это все еще медленно. Звучит так, как будто это требование делать 3D-рисование самостоятельно, поэтому, возможно, SDL.NET (который, я думаю, может использовать аппаратное ускорение) - это путь. Он даже имеет (медленный) SurfaceControl для использования.