L'erreur que je dénote ne vient pas de ta lecture de la tilemap qui semble correcte, mais de la première tile lue dans le fichier qui contient les graphismes
Tu commences par lire la tile 0x01 (que ta tilemap considère donc comme la tile 0x00) alors qu'en fait, juste avant il y a une autre tile et c'est cette dernière qui doit être prise en référence
Dans ton fichier graphique (celui ou y'a tes tiles) ton header fait 0x14 octets, et là sur ton image, c'est comme-ci il faisait 0x54 octets
Cale ton adresse de départ sur 0x14 et normalement ton image sera alignée en extraction
Pour les couleurs, la couleur de fond ou de transparence peut être différente in-game
Même les autres couleurs de la palette peuvent avoir un autre rendu à l'écran, parfois un bout de code vient retravailler ça, à voir sur le tas
Mais là sur ton image pour moi c'est très clair, il te manque la tile 0x00 comme référence de départ sinon tu n'obtiendrais pas ce résultat décalé
Lorsque j'avais commencé à reconstruire le fichier manuellement en suivant la tilemap pour te montrer en exemple comment ça fonctionne, je n'ai pas eu ce problème car j'ai pris la bonne tile 0x00 comme base
En lisant le fichier tilemap il y a une tile inexistante à la fin, le nombre de tile supposé être dans le fichier tile est plus petite -1 que le nombre demandé par le fichier tilemap.
Parce qu'il te manque la tile 0x00 tout simplement, tu te plantes dans l'adresse de départ des tiles et donc il t'en manque forcément une (d'où ton décalage sur ton extraction)