Tileset Packer: Details zum Code

Wie versprochen gibt es jetzt ein paar Details zum Code des Tileset Packers. Das Programm hat (meiner Meinung nach) ein paar interessante Stellen, die dem einen oder anderen .Net-Coder bestimmt helfen können.

Im Grunde hat der Packer drei Probleme zu lösen:

  1. Das Tileset muss verschnitten werden
  2. Doppelte Tiles müssen aussortiert werden
  3. Das Tileset muss effektiv wieder zusammen gesetzt werden

Dazu sollte das Programm natürlich eine gewisse Geschwindigkeit an den Tag legen. Das verschneiden kann man relativ einfach mit Bitmap.Clone erledigen, doch das ist sehr langsam, und dazu nimmt die Geschwindigkeit auch noch mit zunehmender Größe der Bitmap ab. (Große Bitmap = langsamer Code). Es musste also eine Alternative her. Durch einen Tipp in einem Forum bin ich dann auf Bitmap.LockBits gestoßen, eine Methode die direkt (unsafe) auf die Bitmap zugreift und dadurch sehr schnell ist. Von dieser Methode bekommt man ein BitmapData Objekt, mit dem man über einen Pointer auf die Daten im Arbeitsspeicher zugreifen kann.

Diese Daten verwendet dann die Methode GetHash, die aus den Bitmapdaten einen Hash generiert, mit dem doppelte Tiles aussortiert werden können.

Weiterlesen