Refactor OutputDevice::DrawImage()

There is a fair amount of code duplication going on here. If no valid
Size is passed to the function then we should pass on Size(), then in
the function we call we should check to see if there is a valid size.
In fact, this is something we should probably check for anyway, so if
anything this makes the code slightly more robust.

Change-Id: If7b55e5505ada6739375c69b123cf1e34a0fa66d