다음을 통해 공유


방법: 배경으로 사용된 이미지의 가로 세로 비율 유지

이 예제에서는 이미지의 가로 세로 비율을 유지하기 위해 ImageBrushStretch 속성을 사용하는 방법을 보여 줍니다.

기본적으로 ImageBrush를 사용하여 영역을 그릴 때 출력 영역을 완전히 채우도록 해당 콘텐츠가 확장됩니다. 출력 영역과 이미지의 가로 세로 비율이 다르면 이미지가 확장되면서 왜곡됩니다.

ImageBrush에서 해당 이미지의 가로 세로 비율을 유지하려면 Stretch 속성을 Uniform 또는 UniformToFill로 설정합니다.

예제

다음 예제에서는 두 개의 ImageBrush 개체를 사용하여 두 개의 직사각형을 그립니다. 각 사각형은 300 × 150픽셀 크기이며 각각 300 x 300픽셀 이미지를 포함합니다. 첫 번째 브러시의 Stretch 속성이 Uniform으로 설정되고 두 번째 브러시의 Stretch 속성이 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";
        }
    }
}

다음 그림에서는 Stretch 설정이 Uniform인 첫 번째 브러시의 출력을 보여 줍니다.

Uniform 늘리기를 사용한 ImageBrush

다음 그림에서는 Stretch 설정이 UniformToFill인 두 번째 브러시의 출력을 보여 줍니다.

UniformToFill 늘리기를 사용한 ImageBrush

Stretch 속성은 다른 TileBrush 개체, 즉 DrawingBrushVisualBrush에 대해 동일하게 동작합니다. ImageBrush 및 다른 TileBrush 개체에 대한 자세한 내용은 이미지, 드로잉 및 시각적 표시로 그리기를 참조하세요.

또한 Stretch 속성은 TileBrush 콘텐츠가 해당 출력 영역에 맞게 확장되는 방식을 지정하는 것처럼 보이지만 실제로는 TileBrush 콘텐츠가 기본 타일을 채우기 위해 확장되는 방식을 지정합니다. 자세한 내용은 TileBrush를 참조하세요.

이 코드 예제는 제공 된 큰 예제의 일부는 ImageBrush 클래스입니다. 전체 샘플을 보려면 ImageBrush 샘플을 참조하세요.

참고 항목