当我在 C# 中创建基于图块的地图编辑器时,我倾向于遍历 X、Y 轴并调用 Graphics.DrawImage() 以将单个图块从图块集位图到地图位图上。这个过程需要几秒钟才能完成,所以我只在加载新地图或更改其图块集时执行一次。从那里开始的任何编辑都是相对快速的仅已编辑图块的块。
现在,我今天早些时候坐下来考虑我的选择。Graphics.DrawImage() 是三个(其他是 DrawImageUnscaled 和 DrawImageUnscaledAndCropped(?))中唯一允许指定源原点的一个。DrawImageUnscaled()快得多,但总是从源位图的左上角开始。
与 QuickBasic PSET 与 POKEing 视频内存的速度或 VB6 的 PSet 与 WinAPI 的 SetPixel 的速度形成鲜明对比的是,简单的 Get/SetPixel 循环与 DrawImageUnscaled 调用一样快,但进行了只有 DrawImage 才能进行的裁剪。
现在这已经足够快了,但我想知道像直接图像处理这样的东西如何能更快地加快速度?可能是 LockBits 的东西,一个我几乎一无所知的功能?