【发布时间】:2009-06-12 19:01:07
【问题描述】:
当我在 C# 中创建基于图块的地图编辑器时,我倾向于遍历 X、Y 轴并调用 Graphics.DrawImage() 以将单个图块从图块集位图到地图位图上。这个过程需要几秒钟才能完成,所以我只在加载新地图或更改其图块集时执行一次。从那里开始的任何编辑都是相对快速的仅已编辑图块的块。
现在,我今天早些时候坐下来考虑我的选择。 Graphics.DrawImage() 是三个(其他是 DrawImageUnscaled 和 DrawImageUnscaledAndCropped(?))中唯一允许指定源原点的一个。 DrawImageUnscaled() 快得多,很多,但总是从源位图的左上角开始。
与 QuickBasic PSET 与 POKEing 显存或 VB6 的 PSet 与 WinAPI 的 SetPixel 的速度形成鲜明对比,简单的 Get/SetPixel 循环与 DrawImageUnscaled 调用一样快,但裁剪只有 DrawImage 才会这样做。
目前这已经足够快了,但我想知道像直接图像处理这样的东西如何能更快地加快速度?可能是 LockBits 的东西,一个我几乎一无所知的功能?
【问题讨论】:
-
这不是您问题的真正答案,但您可以通过定义图像的整个矩形 -> X、Y、宽度、高度来提高 DrawImage 的速度。在我的测试中,我实现了大约 20% 的加速。
标签: .net optimization performance tiles