當我在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