only create canvas context & canvas image data once