Поделиться через


Практическое руководство. Мозаичное заполнение фигуры заданным изображением

По аналогии с укладкой мозаики одна к другой при заполнении пола прямоугольные изображения можно укладывать одно к другому, чтобы заполнить фигуру. Для мозаичного заполнения внутренней части фигуры используется текстурная кисть. При создании объекта TextureBrush одним из передаваемых конструктору параметров является объект Image. При использовании текстурной кисти для заполнения внутренней части фигуры заполнение осуществляется повторяющимися копиями изображения.

Свойство "режим обертывания" объекта TextureBrush определяет способ ориентации изображения при его тиражировании в прямоугольной сетке. Можно использовать одну и ту же ориентацию для всех изображений — элементов этой сетки. Можно также осуществлять переворот изображения от позиции к позиции сетки. Переворот может быть горизонтальным, вертикальным или объединением этих вариантов. В приведенных ниже примерах демонстрируется мозаичное заполнение с использованием различных типов переворота.

Мозаичное заполнение изображением

  • В данном примере используется приведенное ниже изображение размером 75 × 75 для мозаичного заполнения прямоугольника размером 200 × 200.

The tile image that shows a red house and a tree.

  • На рисунке ниже показано, как прямоугольник заполняется изображением (мозаичное заполнение). Обратите внимание, что все элементы мозаики имеют одинаковую ориентацию; переворот не используется.

A rectangle tiled with the image using the same orientation for all tiles.

Image image = new Bitmap("HouseAndTree.gif");
TextureBrush tBrush = new TextureBrush(image);
Pen blackPen = new Pen(Color.Black);
e.Graphics.FillRectangle(tBrush, new Rectangle(0, 0, 200, 200));
e.Graphics.DrawRectangle(blackPen, new Rectangle(0, 0, 200, 200));
Dim image As New Bitmap("HouseAndTree.gif")
Dim tBrush As New TextureBrush(image)
Dim blackPen As New Pen(Color.Black)
e.Graphics.FillRectangle(tBrush, New Rectangle(0, 0, 200, 200))
e.Graphics.DrawRectangle(blackPen, New Rectangle(0, 0, 200, 200))

Горизонтальный переворот изображения при мозаичном заполнении

  • В этом примере используется одно изображение размером 75 × 75 для заполнения прямоугольника размером 200 × 200. Режим обертывания выбран таким образом, чтобы изображение перевертывалось по горизонтали. На рисунке ниже показано, как прямоугольник заполняется изображением (мозаичное заполнение). Обратите внимание, что при переходе от элемента к элементу в некотором ряду мозаичной сетки изображение перевертывается по горизонтали.

A rectangle tiled with the image flipped horizontally.

Image image = new Bitmap("HouseAndTree.gif");
TextureBrush tBrush = new TextureBrush(image);
Pen blackPen = new Pen(Color.Black);
tBrush.WrapMode = WrapMode.TileFlipX;
e.Graphics.FillRectangle(tBrush, new Rectangle(0, 0, 200, 200));
e.Graphics.DrawRectangle(blackPen, new Rectangle(0, 0, 200, 200));
Dim image As New Bitmap("HouseAndTree.gif")
Dim tBrush As New TextureBrush(image)
Dim blackPen As New Pen(Color.Black)
tBrush.WrapMode = WrapMode.TileFlipX
e.Graphics.FillRectangle(tBrush, New Rectangle(0, 0, 200, 200))
e.Graphics.DrawRectangle(blackPen, New Rectangle(0, 0, 200, 200))

Вертикальный переворот изображения при мозаичном заполнении

  • В этом примере используется одно изображение размером 75 × 75 для заполнения прямоугольника размером 200 × 200. Режим обертывания выбран таким образом, чтобы изображение переворачивалось по вертикали.

    Image image = new Bitmap("HouseAndTree.gif");
    TextureBrush tBrush = new TextureBrush(image);
    Pen blackPen = new Pen(Color.Black);
    tBrush.WrapMode = WrapMode.TileFlipY;
    e.Graphics.FillRectangle(tBrush, new Rectangle(0, 0, 200, 200));
    e.Graphics.DrawRectangle(blackPen, new Rectangle(0, 0, 200, 200));
    
    Dim image As New Bitmap("HouseAndTree.gif")
    Dim tBrush As New TextureBrush(image)
    Dim blackPen As New Pen(Color.Black)
    tBrush.WrapMode = WrapMode.TileFlipY
    e.Graphics.FillRectangle(tBrush, New Rectangle(0, 0, 200, 200))
    e.Graphics.DrawRectangle(blackPen, New Rectangle(0, 0, 200, 200))
    
    

Мозаичное заполнение с переворотом изображения по горизонтали и вертикали

  • В этом примере используется одно изображение размером 75 × 75 для заполнения прямоугольника размером 200 × 200. Режим обертывания установлен так, чтобы осуществлялся одновременный переворот изображения по горизонтали и вертикали. На рисунке ниже показано, как прямоугольник заполняется изображением (мозаичное заполнение). Обратите внимание, что при переходе от элемента к элементу в рядах мозаичной сетки изображение переворачивается зеркально по горизонтали, а при переходе от элемента к элементу в столбцах — по вертикали.

A rectangle tiled with the image flipped horizontally and vertically.

Image image = new Bitmap("HouseAndTree.gif");
TextureBrush tBrush = new TextureBrush(image);
Pen blackPen = new Pen(Color.Black);
tBrush.WrapMode = WrapMode.TileFlipXY;
e.Graphics.FillRectangle(tBrush, new Rectangle(0, 0, 200, 200));
e.Graphics.DrawRectangle(blackPen, new Rectangle(0, 0, 200, 200));
Dim image As New Bitmap("HouseAndTree.gif")
Dim tBrush As New TextureBrush(image)
Dim blackPen As New Pen(Color.Black)
tBrush.WrapMode = WrapMode.TileFlipXY
e.Graphics.FillRectangle(tBrush, New Rectangle(0, 0, 200, 200))
e.Graphics.DrawRectangle(blackPen, New Rectangle(0, 0, 200, 200))

См. также