public static Tuple<int, int> Confine(Tuple<int, int> requiredSize, Tuple<int, int> imageSize)
if (imageSize.Item1 <= requiredSize.Item1 && imageSize.Item2 <= requiredSize.Item2)
var scaleW = requiredSize.Item1 / (double)imageSize.Item1;
var scaleH = requiredSize.Item2 / (double)imageSize.Item2;
var scale = Math.Min(scaleW, scaleH);
return new Tuple<int, int>((int)Math.Round((imageSize.Item1 * scale)),(int)Math.Round((imageSize.Item2 * scale)));
public static void Main()
Tuple<int, int> requiredSize = new Tuple<int, int>(150, 150);
Tuple<int, int> imageSize = new Tuple<int, int>(2992, 3520);
Tuple<int, int> size = Confine(requiredSize, imageSize);
System.Console.WriteLine("{0},{1}", size.Item1, size.Item2);