logo
CSharp_Graphics

Локальные преобразования

Локальным преобразованием называется преобразование, применяемое к определенному рисуемому элементу. Например, объект GraphicsPath содержит метод Transform, позволяющий выполнять преобразования над точками, задающими контур. В приведенном ниже примере демонстрируется рисование прямоугольника без преобразования и рисование контура с применением поворота. (Предполагается, что объемные преобразования отсутствуют.)

---------

Сочетание объемного преобразования и локального преобразования позволяет получать различные результаты. Например, объемное преобразование можно использовать для изменения системы координат, а локальные преобразования можно использовать для вращения и масштабирования объектов, рисуемых в новой системе координат.

Предположим, что нужно задать систему координат с началом, удаленным на 200 точек от левого края и на 150 точек от верхнего края клиентской области. Кроме того, предположим, что в качестве единицы измерения в этой системе координат должна использоваться точка, ось X должна быть направлена вправо, а ось Y — вверх. Ось Y системы координат, заданной по умолчанию, направлена вниз, поэтому нужно выполнить отражение относительно горизонтальной оси. На приведенном ниже рисунке показана матрица, задающая такое отражение.

Затем предположим, что нужно выполнить сдвиг на 200 единиц вправо и на 150 единиц вниз.

В приведенном ниже примере демонстрируется введение системы координат, описанное заданием объемного преобразования для объекта Graphics.

-------

The following code (placed at the end of the preceding example) creates a path that consists of a single rectangle with its lower-left corner at the origin of the new coordinate system. The rectangle is filled once with no local transformation and once with a local transformation. The local transformation consists of a horizontal scaling by a factor of 2 followed by a 30-degree rotation.

// Create the path.

GraphicsPath myGraphicsPath = new GraphicsPath();

Rectangle myRectangle = new Rectangle(0, 0, 60, 60);

myGraphicsPath.AddRectangle(myRectangle);

// Fill the path on the new coordinate system.

// No local transformation

myGraphics.FillPath(mySolidBrush1, myGraphicsPath);

// Set the local transformation of the GraphicsPath object.

Matrix myPathMatrix = new Matrix();

myPathMatrix.Scale(2, 1);

myPathMatrix.Rotate(30, MatrixOrder.Append);

myGraphicsPath.Transform(myPathMatrix);

// Fill the transformed path on the new coordinate system.

myGraphics.FillPath(mySolidBrush2, myGraphicsPath);

The following illustration shows the new coordinate system and the two rectangles.

Приведенный ниже код (который должен следовать сразу после кода из примера, приведенного выше) создает контур, состоящий из одного прямоугольника, нижний левый угол которого расположен в начале новой системы координат. Прямоугольник заливается один раз без применения локальных преобразований и один раз с применением локального преобразования. Локальное преобразование заключается в масштабировании по горизонтали с коэффициентом 2, после которого применяется поворот на 30 градусов.

-----

На приведенном ниже рисунке изображена полученная новая система координат и два прямоугольника.

Using Managed Graphics Classes

Getting Started with Graphics Programming

This section shows how to get started using GDI+ in a Windows Forms application.

How to: Create Graphics Objects for Drawing

Before you can draw lines and shapes, render text, or display and manipulate images with GDI+, you need to create a Graphics object. The Graphics object represents a GDI+ drawing surface, and is the object that is used to create graphical images.

There are two steps in working with graphics:

  1. Creating a Graphics object.

  2. Using the Graphics object to draw lines and shapes, render text, or display and manipulate images.

Creating a Graphics Object

A graphics object can be created in a variety of ways.

To create a graphics object

-or-

-or-

The following sections give details about each of these processes.

PaintEventArgs in the Paint Event Handler

When programming the PaintEventHandler for controls, a graphics object is provided as one of the PaintEventArgs.

To obtain a reference to a Graphics object from the PaintEventArgs in the Paint event

  1. Declare the Graphics object.

  2. Assign the variable to refer to the Graphics object passed as part of the PaintEventArgs.

  3. Insert code to paint the form or control.