Чтобы избежать растяжения, вы можете использовать кросс-умножение.
Image Width Desired Width
--------------- = ---------------
Image Height New Height
или
Image Width New Width
--------------- = ---------------
Image Height Desired Height
В коде это выглядит примерно так
int height = img.Width*newWidth/image.Height;
или
int height = img.Width/image.Height*newWidth;
и
int width = img.Height*newHeight/image.Width;
или
int width = img.Height/image.Width*newHeight;
Затем при создании нового растрового изображения вы можете нарисовать масштабированное изображение на новом растровом изображении, используя желаемый размер и производный размер.