eliminate crash & garbage on 2x > zoom > 1x

See #10025. Am not happy about all the floorf() and ceilf(), but the latter is necessary or else will shave one pixel off of far side of image. There may be a better way to do this by someone more familiar with the code!

Also still doesn't address noise at 200% when move toward far edge of image.