performance: avoid getImageData in every Character.draw()