Про фильтрацию это я прогнал, это бы пригодилось может быть в другой какой ситуации, но не в этой.

Попробовал смоделировать масштабирование разными способами. Исходные картинки брал из своего эмулятора.

http://sensi.org/~svo/image-scaling/

Nearest:
Код:
out_pixel[x] = in_pixel[floor(x * scale + 0.5)]
Linear:
Код:
mix(x,y,a): return x * (1 - a) + y * a
x1 = floor(x * scale)
a = x * scale - floor(x*scale)
out_pixel[x] = mix(in_pixel[x1], in_pixel[x1+1], a)