- •1. Цель работы
- •2. Сведения из теории
- •2.2. Пространство имен System.Drawing. Служебные типы
- •2.3. Сеансы вывода графики. Класс Graphics
- •2.5. Графический вывод текста. Работа со шрифтами
- •2.6. Рисование графиков функций
- •3. Пример выполнения работы
- •3.1. Визуальное проектирование диалогового окна
- •3.2. Проектирование программного кода
- •4. Варианты заданий для самостоятельной работы
2.3. Сеансы вывода графики. Класс Graphics
Работа с графическими устройствами, такими, как принтер, дисплей в Windows вообще и в .NET в частности является аппаратно-независимой. Это значит, что при программировании под Windows средств прямого доступа к аппаратуре нет. Все взаимодействие с ней производится через специальные методы. При этом для вывода на графические устройства используется один и тот же набор функций.
Для того чтобы определить, на какое устройство осуществляется вывод (весь экран, клиентская область окна, принтер и т.д.), используется понятие контекста устройства (device context). Это объект класса Graphics, содержащий все методы для построения изображения в окне. Кроме того, он содержит данные о графическом устройстве вывода. Для осуществления вывода создается контекст устройства и тем самым определяется конкретное устройство для вывода. А далее к созданному объекту можно применять все имеющиеся методы класса Graphics.
Этот класс не только представляет «поверхность» для размещения изображения (форма, элемент управления или область в памяти), но определяет также множество методов для вывода текста, изображений, геометрических фигур. Частичный список методов данного класса представлен в таблице:
Метод |
Описание |
FromHdc() |
Статические методы, обеспечивающие возможность получения объекта Graphics из элемента управления или изображения |
FromHwnd() | |
FromImage() | |
Clear() |
Закрашивает объект Graphics заданным цветом |
DrawArc() |
Рисует сегмент круга между заданными углами |
DrawBezier() |
Рисует гладкую кривую через заданные 4 точки |
DrawBeziers() |
Рисует гладкую кривую через заданный массив точек |
DrawCurve() |
Рисует гладкую кривую через заданный массив точек |
DrawEllipse() |
Рисует эллипс |
DrawIcon() |
Рисует изображение с заданной иконкой |
DrawLine() |
Рисует одиночную прямую линию |
DrawLines() |
Рисует серию ломаных линий по массиву точек |
DrawPie() |
Рисует сектор эллипса |
DrawPath() |
Рисует замкнутый контур на основе серии точек и кривых |
DrawRectangle() |
Рисует прямоугольник |
DrawRectangles() |
Рисует несколько прямоугольников |
DrawString() |
Рисует текст |
FillEllipse() |
Рисует закрашенный эллипс |
FillPath() |
Рисует закрашенный замкнутый контур |
FillPie() |
Рисует закрашенный сектор эллипса |
FillPolygon() |
Рисует закрашенный замкнутый контур по серии точек |
FillRectangle() |
Рисует закрашенный прямоугольник |
Класс Graphics не допускает непосредственного создания своего объекта с помощью ключевого слова new, поскольку этот класс не имеет открытых конструкторов. Поэтому контекст устройства можно только получить из элемента управления или изображения, а затем ссылку на него присвоить объекту класса Graphics. Например:
Graphics G = PictureBox1.CreateGraphics();
2.4. Системы координат GDI+
Система координат по умолчанию использует в качестве единицы измерения пиксели, а в качестве исходной точки – верхний левый угол. Координата X определяет смещение вправо, а координата Y – смещение вниз.
Разница между измерением положения относительно верхнего левого угла документа и относительно верхнего левого угла экрана настолько важна, что в GDI+ предусмотрены специальные наименования для этих координатных систем:
мировые координаты (world coordinates) – указывают позицию точки, измеренную в пикселях от левого верхнего угла документа;
страничные координаты (page coordinates) – указывают позицию точки, измеренную в пикселях от левого верхнего угла клиентской области;
координаты устройства (device coordinates) – подобны страничным координатам за исключением того, что в качестве единиц измерения используются не пиксели, а другие единицы измерения, определяемые пользователем через свойство PageUnit класса Graphics (дюймы, миллиметры и т.д.).
Как было сказано выше, по умолчанию точкой отсчета для системы координат является верхний левый угол клиентской области окна. Однако бывают ситуации, когда удобнее, чтобы точка отсчета была расположена в другом месте. Для этого используется метод TranslateTransform() класса Graphics. Например, установить точку отсчета в положение 100, 100 относительно системы координат по умолчанию можно следующим образом:
g.TranslateTransform(100, 100);