Sound like a good idea - but your solution still forces me to paint an image for each visible grid cell in every application loop. That could still result in up to 300-400 images.

I am not sure if painting images is quicker than painting sprites. In my game engine the difference between images and sprites are close to nothing. I will need to test that.