Don't edit manually each tile...Just store the background somewhere in rom or ram or psram and just do something like :
void upload_tiles(const unsigned char* buffer,int tileW,int tileH)
{
const char* end;
sprite_t* img = (sprite_t*)buffer;
const int blockSize = (tileW * tileH * img->bitdepth);
buffer += sizeof(sprite_t); //Skip lib dragon header
for(end = img->w * img->h * img->bitdepth - sizeof(sprite_t); buffer < end; buffer += blockSize)
{
img.data = buffer;
sync pipe
upload data
display data
}
}
Then you do :
upload_tiles(buffer,32,32);
to fill the screen with 32x32 tiles.

ps - By the way , the image looks pretty good.Is it 32 or 16 bit?

ps2 - forgot to tell you that of course you must calculate the offset of each tile.
Its extremely simple.You'll need a variable for X and Y axis. Then , while looping , you increase X axis equally to tileW.
When X axis reaches screen width , you increase the Y axis by tileH pixels and you set the x pointer back to offset 0.

Edit again - Anyway here's the code if you feel puzzled

void upload_tiles(const unsigned char* buffer,int tileW,int tileH)
{
const char* end;
int x,y;
sprite_t* img = (sprite_t*)buffer;
const int blockSize = (tileW * tileH * img->bitdepth);
buffer += sizeof(sprite_t); //Skip lib dragon header
for(x = y = 0,end = img->w * img->h * img->bitdepth - sizeof(sprite_t); buffer < end; buffer += blockSize)
{
if(x >= img->w)
{
x = 0;
y += tileH;
}
img.data = buffer;
sync pipe
upload data
display img , x , y
x += tileW;
}
}