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);
// ...
}
このイベントは、コントロールの描画が必要になるたびに発生します。最初の行は、描画されている領域が空かどうかをチェックします。これは CPU 時間を節約するだけでなく、アプリケーションがクラッシュする可能性があります。0x0 ビットマップを作成するためです。
編集: はい、Dock = DockStyle.Fill の場合、これはサイズ変更可能です。ウィンドウのサイズが変更されると、コントロールが拡大してスペースを埋めます。その後、再描画されます - イベントが発生します。
EDIT 2:他の人が指摘したように、これはまだ遅いです。自分で3D描画を行う必要があるように聞こえるので、おそらくSDL.NET(ハードウェアアクセラレーションを使用できると思います)が最適です。使用する(遅い)SurfaceControlさえあります。