Don't you want to use sourceRectangle.w and sourceRectangle.h here instead of fullsizeWidth and Height?  If the original image is portrait mode, but the user has cropped it to be landscape then you're going to be creating a landscape preview and that is the aspect ratio that you want to fit into the screen space you have available.