Partager via


Comment : conserver les proportions d'une image utilisée comme arrière-plan

Cet exemple montre comment utiliser la Stretch propriété d’un ImageBrush afin de conserver les proportions de l’image.

Par défaut, lorsque vous utilisez une ImageBrush zone pour peindre une zone, son contenu s’étend pour remplir complètement la zone de sortie. Lorsque la zone de sortie et l’image ont des proportions différentes, l’image est déformée par cet étirement.

Pour conserver ImageBrush les proportions de son image, définissez la Stretch propriété sur Uniform ou UniformToFill.

Exemple

L’exemple suivant utilise deux ImageBrush objets pour peindre deux rectangles. Chaque rectangle est de 300 par 150 pixels et chacun contient une image de 300 par 300 pixels. La Stretch propriété du premier pinceau est définie Uniformsur , et la Stretch propriété du deuxième pinceau est définie sur UniformToFill.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using System.Windows.Media;
using System.Windows.Shapes;

namespace Microsoft.Samples.Graphics.UsingImageBrush
{
    /// <summary>
    /// Demonstrates different ImageBrush Stretch settings.
    /// </summary>
    public class StretchModes : Page
    {
        public StretchModes()
        {

            // Create an ImageBrush with its Stretch
            // property set to Uniform. The image it
            // contains will be expanded as much as possible
            // to fill the output area while still
            // preserving its aspect ratio.
            ImageBrush uniformBrush = new ImageBrush();
            uniformBrush.ImageSource =
                new BitmapImage(new Uri("sampleImages\\square.jpg", UriKind.Relative));
            uniformBrush.Stretch = Stretch.Uniform;

            // Freeze the brush (make it unmodifiable) for performance benefits.
            uniformBrush.Freeze();

            // Create a rectangle and paint it with the ImageBrush.
            Rectangle rectangle1 = new Rectangle();
            rectangle1.Width = 300;
            rectangle1.Height = 150;
            rectangle1.Stroke = Brushes.MediumBlue;
            rectangle1.StrokeThickness = 1.0;
            rectangle1.Fill = uniformBrush;

            // Create an ImageBrush with its Stretch
            // property set to UniformToFill. The image it
            // contains will be expanded to completely fill
            // the rectangle, but its aspect ratio is preserved.
            ImageBrush uniformToFillBrush = new ImageBrush();
            uniformToFillBrush.ImageSource =
                new BitmapImage(new Uri("sampleImages\\square.jpg", UriKind.Relative));
            uniformToFillBrush.Stretch = Stretch.UniformToFill;

            // Freeze the brush (make it unmodifiable) for performance benefits.
            uniformToFillBrush.Freeze();

            // Create a rectangle and paint it with the ImageBrush.
            Rectangle rectangle2 = new Rectangle();
            rectangle2.Width = 300;
            rectangle2.Height = 150;
            rectangle2.Stroke = Brushes.MediumBlue;
            rectangle2.StrokeThickness = 1.0;
            rectangle2.Margin = new Thickness(0, 10, 0, 0);
            rectangle2.Fill = uniformToFillBrush;

            StackPanel mainPanel = new StackPanel();
            mainPanel.Children.Add(rectangle1);
            mainPanel.Children.Add(rectangle2);

            Content = mainPanel;
            Background = Brushes.White;
            Margin = new Thickness(20);
            Title = "ImageBrush Stretch Modes";
        }
    }
}

L’illustration suivante montre la sortie du premier pinceau, qui a un Stretch paramètre de Uniform.

ImageBrush with Uniform stretching

L’illustration suivante montre la sortie du deuxième pinceau, qui a un Stretch paramètre .UniformToFill

ImageBrush with UniformToFill stretching

Notez que la Stretch propriété se comporte de façon identique pour les autres TileBrush objets, c’est-à-dire pour DrawingBrush et VisualBrush. Pour plus d’informations sur et les ImageBrush autres TileBrush objets, consultez Peinture avec des images, des dessins et des visuels.

Notez également que, bien que la propriété semble spécifier la façon dont le StretchTileBrush contenu s’étend pour s’adapter à sa zone de sortie, il spécifie en fait comment le TileBrush contenu s’étend pour remplir sa vignette de base. Pour plus d’informations, consultez TileBrush.

Cet exemple de code fait partie d’un exemple plus large fourni pour la ImageBrush classe. Pour l’exemple complet, consultez la page ImageBrush, exemple.

Voir aussi