Mhh, ich hab das mal probiert, es ist doch falsch was ich da erzähle.
Wenn man ein skaliertes Bild hat, erhält man weder durch width noch durch offsetWidth die richtige Größe (ist eigentlich auch logisch), sondern man muss es so wie du es vorgeschlagen hast umkopieren auf ein Image Objekt, dann geht es mit width und in dem Fall muss man auch nicht auf den onload Event warten..
<img src="bilder/test_gr.jpg" width="50%" onclick="checksize(this)">
Code:
function checksize(img) {
var i = new Image();
i.src = img.src;
alert(i.width)
}