private static Gdk.Pixbuf Scale(Gdk.Pixbuf pixbuf, int width, int height, out int widthPadding, out int heightPadding) { if (pixbuf.Width == width && pixbuf.Height == height) { widthPadding = 0; heightPadding = 0; return(pixbuf); } double scale = Math.Min(width / (double)pixbuf.Width, height / (double)pixbuf.Height); int scaleWidth = (int)(scale * pixbuf.Width); int scaleHeight = (int)(scale * pixbuf.Height); Gdk.Pixbuf scaled = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, false, 8, width, height); scaled.Fill(0); widthPadding = width - scaleWidth; heightPadding = height - scaleHeight; pixbuf.Scale(scaled, widthPadding / 2, heightPadding / 2, scaleWidth, scaleHeight, widthPadding / 2, heightPadding / 2, scale, scale, Gdk.InterpType.Bilinear); return(scaled); }