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


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

Обновлен: Ноябрь 2007

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

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

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

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

Мозаика 1

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

Мозаика 2

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))

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));

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

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

Мозаика 3

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))

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));

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

  • В следующем примере используется одно изображение размером 75×75 для заполнения прямоугольника размером 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))
    
    
    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));
    

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

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

Мозаика 5

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))

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));

См. также

Другие ресурсы

Использование кисти для заливки фигур