Tom @ Corona has been helpful in finding out more info on this and here is his reponse:
>>> *********
It turns out what you’re seeing is expected and here’s the reason why.
You are creating a virtual 320 x 480 display. For devices that are the exact ratio of that display (e.g., iPhone and iPhone 4), everything is fine. For the iPad and other devices, the ratio of those screens are not exact multiples. When you try to scale the group to compensate for the scaling factor, it doesn’t align on integer pixel boundaries nor does it scale exactly so it can be plus/minus one pixel in the scaled size. Now when you do a display.save of this object, it tries to capture a few extra pixels on all sides of the object so it doesn’t cut off any part of the object. This plus the inaccurate scaling size, will cause the resulting saved image to be off by a few pixels from the original.
If the intent is to redisplay the saved images on the screen, using display.newImageRect and specifying the expect width and height will correctly show the images.
I hope that explains what you’re seeing. I did test your code out on the simulator and a few devices and everything is working as expected.
****** <<<
I personally do not understand the need to “capturing extra pixel on sides” part, the cause of +3 pixels on iPad I guess, but here it is for any one interested in knowing what goes on under the hood. I’d still be interested in knowing why can’t we save exact sizes ± 1 pixel due to rounding. So if someone knows, please comment. I am not spending any more time on this issue.
Thanks