如何编辑窗口中的单个像素?

时间:2010-06-25 19:10:25

标签: c# memory screen pixels

我想创建一个简单的视频渲染器来玩,并做一些像创建移动操作系统的东西,只是为了好玩。我的父亲告诉我,在最初的计算机中,你会编辑一个特定的内存地址,屏幕会更新。我想在Windows窗口中模拟这个。有什么方法可以用C#做​​到这一点吗?

2 个答案:

答案 0 :(得分:4)

以前这样做是因为您可以直接访问视频缓冲区。这通常不适用于今天的系统,因为视频内存由视频驱动程序和操作系统管理。此外,实际上没有视频内存缓冲区的1:1映射以及显示的内容。有了这么多可用内存,就可以有多个缓冲区并在它们之间切换。当前显示的缓冲区称为“前缓冲区”,其他未显示的缓冲区称为“后台缓冲区”(更多信息请参见http://en.wikipedia.org/wiki/Multiple_buffering)。我们通常写回缓冲区,然后让视频系统为我们更新前缓冲区。这提供了平滑的更新,因为视频驱动程序将更新与监视器的扫描速率同步。

要使用C#写入后台缓冲区,我最喜欢的技术是使用WPF WritableBitmap。我还使用System.Drawing.Bitmap通过LockBits向其添加像素来更新屏幕。

答案 1 :(得分:2)

这是一个超出范围的全功能主题(它不适合,不是我不会喋喋不休几个小时:-)这个答案..但这应该让你开始用C#绘图

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

事情已经从过去的直接记忆操作中得到了一点......尽管一切仍然与像素有关。

编辑:哦,如果你遇到闪烁的问题而陷入困境,请给我一行,然后我会发送一个DoubleBuffered面板进行绘画。