簡単なビデオ レンダラーを作成して遊んでみたり、モバイル OS のようなものを作成したりして楽しみたいと思っています。父は、最初のコンピューターでは、特定のメモリ アドレスを編集すると画面が更新されると教えてくれました。Windowsのウィンドウ内でこれをシミュレートしたいと思います。C#でこれを行う方法はありますか?
2 に答える
これは、ビデオ バッファに直接アクセスできるため、以前は行われていました。ビデオ メモリはビデオ ドライバと OS によって管理されるため、これは通常、今日のシステムでは利用できません。さらに、実際には、ビデオ メモリ バッファと表示されるものの 1:1 マッピングはありません。非常に多くのメモリが利用できるようになったので、複数のバッファを持ち、それらを切り替えることが可能になりました。現在表示されているバッファは「フロント バッファ」と呼ばれ、その他の表示されていないバッファは「バック バッファ」と呼ばれます (詳細については、https://en.wikipedia.org/wiki/Multiple_bufferingを参照してください)。通常、バック バッファーに書き込み、ビデオ システムにフロント バッファーを更新させます。これにより、ビデオ ドライバーが更新をモニターのスキャン レートと同期するため、更新がスムーズに行われます。
C# を使用してバック バッファーに書き込む場合、私のお気に入りの手法は、WPF WritableBitmapを使用することです。また、 を使用して、 LockBitsSystem.Drawing.Bitmap
を介してピクセルを書き込むことで画面を更新しました。
これは、この回答の範囲外の完全な機能を備えたトピックです (適合しません。何時間もとりとめません :-)。しかし、これで C# での描画を開始できるはずです。
http://www.geekpedia.com/tutorial50_Drawing-with-Csharp.html
物事は、直接メモリ操作の昔から少し来ています..すべてがまだピクセルに関連付けられています.
編集: ちらつきの問題が発生して行き詰まった場合は、私に連絡してください。ペイント用の DoubleBuffered パネルをお送りします。