C# でタイルベースのマップ エディターを作成するときは、X 軸と Y 軸を反復処理し、Graphics.DrawImage() を呼び出して、タイルセット ビットマップからマップ ビットマップに 1 つのタイルを配置する傾向があります。このプロセスは完了するまでに数秒かかるため、新しいマップをロードするときやタイルセットを変更するときに一度だけ実行します。それ以降の編集は、編集されたタイルのみの比較的高速なブリットです。
さて、今日は早めに腰を下ろして、自分の選択肢について考えました。Graphics.DrawImage() は、ソースの原点の指定を可能にする 3 つ (他は DrawImageUnscaled と DrawImageUnscaledAndCropped(?)) のうちの 1 つだけです。DrawImageUnscaled() ははるかに高速でしたが、常にソース ビットマップの左上からブリットされていました。
QuickBasic PSET とビデオ メモリの POKE の速度、または VB6 の PSet と WinAPI の SetPixel の速度とは対照的に、単純な Get/SetPixel ループは、DrawImageUnscaled 呼び出しと同じくらい高速でしたが、DrawImageだけが行うクロッピングを行いました。
今のところはこれで十分ですが、画像を直接操作するような方法でさらに高速化できるのではないかと考えていました。おそらくLockBitsの何か、私がほとんど知らない機能ですか?