当我在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%的加速。 – 2013-04-02 07:30:56