Using the display objects getBounds function can be a reliable solution to translate the coordinates while drawing :
private function drawOntoGraphics(source : IBitmapDrawable, target : Graphics, position : Point = null) : void
{
position = position == null ? new Point() : position;
var bounds : Rectangle = DisplayObject(source).getBounds(DisplayObject(source));
var bitmapData : BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000);
bitmapData.draw(source, new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y), null, null, null, true);
target.beginBitmapFill(bitmapData, new Matrix(1, 0, 0, 1, bounds.x + position.x, bounds.y + position.y));
target.drawRect(bounds.x + position.x, bounds.y + position.y, bounds.width, bounds.height);
}
In addition to your comments... Below the same method using a BitmapData instead of the Graphics object as canvas:
private function drawOntoBitmapData(source : IBitmapDrawable, target : BitmapData, position : Point = null) : void
{
position = position == null ? new Point() : position;
var bounds : Rectangle = DisplayObject(source).getBounds(DisplayObject(source));
var bitmapData : BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000);
bitmapData.draw(source, new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y), null, null, null, true);
target.draw(bitmapData, new Matrix(1, 0, 0, 1, bounds.x + position.x, bounds.y + position.y));
}