我想创建一个简单的视频渲染器来玩,并做一些事情,比如创建一个移动操作系统只是为了好玩。我父亲告诉我,在第一台计算机中,你会编辑一个特定的内存地址,然后屏幕就会更新。我想在 Windows 的窗口中模拟这个。有什么办法可以用 C# 做到这一点?
2 回答
过去这样做是因为您可以直接访问视频缓冲区。这通常不适用于当今的系统,因为视频内存由视频驱动程序和操作系统管理。此外,视频内存缓冲区和显示的内容实际上不再存在 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 面板供您绘画。