Partager via


Comment : définir la taille de la mosaïque pour un TileBrush

Cet exemple montre comment définir la taille de la mosaïque pour un TileBrush. Par défaut, un TileBrush produit une seule mosaïque qui remplit complètement la zone que vous peignez. Vous pouvez substituer ce comportement en définissant les propriétés Viewport et ViewportUnits.

La propriété Viewport spécifie la taille de la mosaïque pour un TileBrush. Par défaut, la valeur de la propriété Viewport est relative à la taille de la zone qui est peinte. Pour que la propriété Viewport spécifie une taille de mosaïque absolue, affectez à la propriété ViewportUnits la valeur Absolute.

Exemple

L'exemple suivant utilise un ImageBrush, un type de TileBrush, pour peindre un rectangle avec des mosaïques. L'exemple définit chaque mosaïque à 50 % par 50 % de la zone de sortie (le rectangle). Par conséquent, le rectangle est peint avec quatre projections de l'image.

L'illustration suivante montre la sortie produite par l'exemple.

Exemple de mosaïque avec un pinceau image


            '
            ' Create an ImageBrush and set the size of each
            ' tile to 50% by 50% of the area being painted. 
            ' 
            Dim relativeTileSizeImageBrush As New ImageBrush()
            relativeTileSizeImageBrush.ImageSource = New BitmapImage(New Uri("sampleImages\cherries_larger.jpg", UriKind.Relative))
            relativeTileSizeImageBrush.TileMode = TileMode.Tile

            ' Specify the size of the base tile. 
            ' By default, the size of the Viewport is
            ' relative to the area being painted,
            ' so a value of 0.5 indicates 50% of the output
            ' area.
            relativeTileSizeImageBrush.Viewport = New Rect(0, 0, 0.5, 0.5)

            ' Create a rectangle and paint it with the ImageBrush.
            Dim relativeTileSizeExampleRectangle As New Rectangle()
            With relativeTileSizeExampleRectangle
                .Width = 200
                .Height = 150
                .Stroke = Brushes.LimeGreen
                .StrokeThickness = 1
                .Fill = relativeTileSizeImageBrush
            End With

//
// Create an ImageBrush and set the size of each
// tile to 50% by 50% of the area being painted. 
// 
ImageBrush relativeTileSizeImageBrush = new ImageBrush();
relativeTileSizeImageBrush.ImageSource =
    new BitmapImage(new Uri(@"sampleImages\cherries_larger.jpg", UriKind.Relative));
relativeTileSizeImageBrush.TileMode = TileMode.Tile;

// Specify the size of the base tile. 
// By default, the size of the Viewport is
// relative to the area being painted,
// so a value of 0.5 indicates 50% of the output
// area.
relativeTileSizeImageBrush.Viewport = new Rect(0, 0, 0.5, 0.5);

// Create a rectangle and paint it with the ImageBrush.
Rectangle relativeTileSizeExampleRectangle = new Rectangle();
relativeTileSizeExampleRectangle.Width = 200;
relativeTileSizeExampleRectangle.Height = 150;
relativeTileSizeExampleRectangle.Stroke = Brushes.LimeGreen;
relativeTileSizeExampleRectangle.StrokeThickness = 1;
relativeTileSizeExampleRectangle.Fill = relativeTileSizeImageBrush;
<!-- The ImageBrush's tiles are set to 50% by 50% of the output area. -->
<Rectangle
  Width="200" Height="150"
  Stroke="LimeGreen" StrokeThickness="1">
  <Rectangle.Fill>
    <ImageBrush
      Viewport="0,0,0.5,0.5"
      TileMode="Tile"
      ImageSource="sampleImages\cherries_larger.jpg" />
  </Rectangle.Fill>
</Rectangle>

L'exemple suivant crée un ImageBrush, affecte à son Viewport la valeur 0,0,25,25 et à son ViewportUnits la valeur Absolute, et l'utilise pour peindre un autre rectangle. Par conséquent, le pinceau produit des mosaïques d'une largeur de 25 pixels et d'une hauteur de 25 pixels.

L'illustration suivante montre la sortie produite par l'exemple.

TileBrush en mosaïque avec fenêtre d'affichage de 0,0,0.25,0.25


'
' Create an ImageBrush and set the size of each
' tile to 25 by 25 pixels. 
' 
Dim absoluteTileSizeImageBrush As New ImageBrush()
absoluteTileSizeImageBrush.ImageSource = New BitmapImage(New Uri("sampleImages\cherries_larger.jpg", UriKind.Relative))
absoluteTileSizeImageBrush.TileMode = TileMode.Tile

' Specify that the Viewport is to be interpreted as
' an absolute value. 
absoluteTileSizeImageBrush.ViewportUnits = BrushMappingMode.Absolute

' Set the size of the base tile. Had we left ViewportUnits set
' to RelativeToBoundingBox (the default value), 
' each tile would be 25 times the size of the area being
' painted. Because ViewportUnits is set to Absolute,
' the following line creates tiles that are 25 by 25 pixels.
absoluteTileSizeImageBrush.Viewport = New Rect(0, 0, 25, 25)

' Create a rectangle and paint it with the ImageBrush.
Dim absoluteTileSizeExampleRectangle As New Rectangle()
With absoluteTileSizeExampleRectangle
    .Width = 200
    .Height = 150
    .Stroke = Brushes.LimeGreen
    .StrokeThickness = 1
    .Fill = absoluteTileSizeImageBrush
End With

//
// Create an ImageBrush and set the size of each
// tile to 25 by 25 pixels. 
// 
ImageBrush absoluteTileSizeImageBrush = new ImageBrush();
absoluteTileSizeImageBrush.ImageSource =
     new BitmapImage(new Uri(@"sampleImages\cherries_larger.jpg", UriKind.Relative));
absoluteTileSizeImageBrush.TileMode = TileMode.Tile;

// Specify that the Viewport is to be interpreted as
// an absolute value. 
absoluteTileSizeImageBrush.ViewportUnits = BrushMappingMode.Absolute;

// Set the size of the base tile. Had we left ViewportUnits set
// to RelativeToBoundingBox (the default value), 
// each tile would be 25 times the size of the area being
// painted. Because ViewportUnits is set to Absolute,
// the following line creates tiles that are 25 by 25 pixels.
absoluteTileSizeImageBrush.Viewport = new Rect(0, 0, 25, 25);

// Create a rectangle and paint it with the ImageBrush.
Rectangle absoluteTileSizeExampleRectangle = new Rectangle();
absoluteTileSizeExampleRectangle.Width = 200;
absoluteTileSizeExampleRectangle.Height = 150;
absoluteTileSizeExampleRectangle.Stroke = Brushes.LimeGreen;
absoluteTileSizeExampleRectangle.StrokeThickness = 1;
absoluteTileSizeExampleRectangle.Fill = absoluteTileSizeImageBrush;
<!-- The ImageBrush's tiles are set to 25 by 25 pixels. -->
<Rectangle
  Width="200" Height="150"
  Stroke="LimeGreen" StrokeThickness="1">
  <Rectangle.Fill>
    <ImageBrush
      Viewport="0,0,25,25"
      ViewportUnits="Absolute"
      TileMode="Tile"
      ImageSource="sampleImages\cherries_larger.jpg" />
  </Rectangle.Fill>
</Rectangle>

Les exemples précédents font partie d'un exemple plus complet. Pour l'exemple complet, consultez ImageBrush, exemple.

Bien que cet exemple utilise la classe ImageBrush, les propriétés Viewport et ViewportUnits se comportent de la même façon pour les autres objets TileBrush, c'est-à-dire pour DrawingBrush et VisualBrush. Pour plus d'informations sur ImageBrush et les autres objets TileBrush, consultez Peinture avec des objets d'image, de dessin et visuels.

Voir aussi

Tâches

Comment : créer différents modèles de mosaïque avec un TileBrush

Référence

TileBrush

Concepts

Peinture avec des objets d'image, de dessin et visuels