If you load your character image into memory using a app.CreateImage() but don't add it to a layout, then you can rotate your source image in memory using the img.Rotate( angle, pivX, pivY ) method using a timer and then copy it to the canvas using the img.DrawImage() method.
If you want to do more exotic transformations, then you will probably need to use the DrawImageMtx() method. You should be able to combine translation and rotation to get what you want.
function DrawFrame()
{
//Clear the canvas.
canvas.Clear();
//Draw two copies of the background image with one drawn off screen
//above the other in the Y direction.
canvas.DrawImage( imgBackground, 0, -1.0 + backGroundY, 1.0, 1.0 );
canvas.DrawImage( imgBackground, 0, backGroundY, 1.0, 1.0 );
//Shift the background images down slightly each frame
//until the lower image is off screen, then we start again.
backGroundY += backGroundShift;
if( backGroundY >= 1.0 ) backGroundY -= 1.0;
//Uncomment the lines below to test the vairous
//types of transform.
//See here for a nice matrix description:-
//Identity.
//var mtx = [ 1,0,0, 0,1,0, 0,0,1 ];
//Translate.
//var mtx = [ 1,0,0.3, 0,1,0.3, 0,0,1 ];
//SkewX.
//var a = Math.PI/4;
//var mtx = [ 1,Math.tan(a),0, 0,1,0, 0,0,1 ];
//Scale.
//var mtx = [ 2.5,0,0, 0,2.5,0, 0,0,1 ];
//Rotate 45 degrees.
var a = 45 * Math.PI/180;
var mtx = [ Math.cos(a),-Math.sin(a),0, Math.sin(a),Math.cos(a),0, 0,0,1 ];
//Draw image with matrix transform.
canvas.DrawImageMtx( imgChar, mtx );
//Update the canvas.
canvas.Update();
}