Когда я делаю редактор карт на основе плиток в C #, я склоняюсь к итерации по осям X, Y и вызываю Graphics.DrawImage (), чтобы переместить одну плитку на месте, из битовой карты набора плиток в битовую карту карты. Этот процесс занимает несколько секунд, поэтому я делаю это только один раз при загрузке новой карты или изменении набора тайлов. Любые правки с этого момента - относительно быстрые блики только отредактированного тайла.
Теперь, я сел сегодня утром и подумал о своих возможностях. Graphics.DrawImage () - единственный из трех (остальные - DrawImageUnscaled и DrawImageUnscaledAndCropped (?)), Который позволяет указать источник источника. DrawImageUnscaled () была намного, намного быстрее, но всегда вспыхивала в верхнем левом углу исходного растрового изображения.
В резком контрасте со скоростями QuickBasic PSET по сравнению с POKEing видеопамяти или VB6 PSet по сравнению с WinAPI SetPixel, простой цикл Get / SetPixel был таким же быстрым, как вызов DrawImageUnscaled , но обрезка, в противном случае только DrawImage сделал бы.
Пока это достаточно быстро, но мне было интересно, как что-то вроде прямой манипуляции с изображениями может ускорить это еще больше? Возможно, что-то с LockBits, функция, о которой я почти ничего не знаю?