Beispiel #1
0
        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);
        }