ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 204
Скачиваний: 2
СОДЕРЖАНИЕ
Графика на С#
На примере графики наглядно видны преимущества ООП, смысл использования классов, их методов и свойств. Добавляя в пространство имен своего проекта соответствующие библиотеки, вы получаете сразу набор инструментов, необходимых для графики. Это графические примитивы (линии, прямоугольники, эллипсы и т.п.), перо для черчения, кисть для закраски и много других полезных объектов и методов. Пространство имен System.Drawing (Рисование) обеспечивает доступ к функциональным возможностям графического интерфейса GDI+ , используя около 50 (!) классов, в том числе класс Graphics. Графические примитивыКласс Graphics
Он инкапсулирует поверхность рисования GDI+. Этот класс не наследуется. Методов в этом классе огромное количество, поэтому сначала представим их в таблице, а затем рассмотрим некоторые из них с примерами и пояснениями. Класс Graphics предоставляет методы рисования на устройстве отображения (другие термины — графический контекст, «холст»). Определимся сразу, на чем мы хотим рисовать. Далее в примерах он обозначается как объект g.Способы задания «холста»
Графический объект — «холст» для рисования на форме Form1 (указатель this) можно задать, например, одним оператором: Graphics g = this.CreateGraphics(); Примечание. Заметим, что стандартным образом Graphics g = new Graphics(); создать объект-холст не удается. На этом операторе генерируется ошибка:Способы задания «холста»
Еще пример задания графического контекста на визуальном компоненте PictureBox (ящик для рисования) через растровый объект класса Bitmap. В классе Form1 зададим два объекта: Graphics g; // графический объект — некий холст Bitmap buf; // буфер для Bitmap-изображения В конструктор Form1() добавим следующие операторы: buf = new Bitmap(pictureBox1.Width, pictureBox1.Height); // с размерами g = Graphics.FromImage(buf); // инициализация gСпособы задания «холста»
Eсли все графические операции выполняются внутри одной функции, можно использовать одну строку: Graphics g = Graphics.FromImage(new Bitmap(pictureBox1.Width, pictureBox1.Height)); После этого можно задать фон холста белым: g.Clear(Color.White); Еще один пример задания «холста» на форме через дескриптор окна: Graphics g = Graphics.FromHwnd(this.Handle);Способы задания «холста»
Еще пример задания графического контекста на визуальном компонентеPictureBox (ящик для рисования) через растровый объект класса Bitmap. В классе Form1 зададим два объекта: Graphics g; // графический объект — некий холст Bitmap buf; // буфер для Bitmap-изображения В конструктор Form1() добавим следующие операторы: buf = new Bitmap(pictureBox1.Width, pictureBox1.Height); // с размерами g = Graphics.FromImage(buf); // инициализация g
Способы задания «холста»
Одним из самых используемых является получение ссылки на объект Graphics через объект PaintEventArgs при обработке события Paint формы или элемента управления: private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; // Далее вставляется код рисования }Методы класса Graphics
| Имя метода | Описание (методы перегружены) |
| Clear(Color) | Очищает всю поверхность рисования и выполняет заливку поверхности указанным цветом фона. |
| Dispose() | Освобождает все ресурсы, используемые данным объектом Graphics. |
| DrawEllipse(Pen, Rectangle) | Рисует эллипс |
| DrawLine(Pen, Point, Point) | Проводит линию, соединяющую две структуры Point. |
| DrawRectangle(Pen, Rectangle) | Рисует прямоугольник, определяемый структурой Rectangle. |
| FillRectangle(Brush, Rectangle) | Заполняет внутреннюю часть прямоугольника, определяемого структурой Rectangle. |
Класс Pen
Класс Pen определяет объект, используемый для рисования прямых линий и кривых. Этот класс не наследуется. Конструкторы класса: 1) Pen(Color) инициализирует новый экземпляр класса Pen с указанным цветом. 2) Pen(Color, Single) инициализирует новый экземпляр класса Pen с указанными свойствами Color и Width.Width – в устанавливает ширину пера Pen, в единицах объекта Graphics, используемого для рисования.
Класс Pen. Примеры
Pen redPen = new Pen(Color.Red); // толщина пера по умолчанию 1 пиксель Color green = Color.Green; // с использованием дополнительной переменной Pen greenPen = new Pen(green, 4.5f); Можно вводить новый объект без указания явного имени пера (пример создания динамического объекта – пера): g.DrawRectangle(new Pen(Color.Red, 3), r); например, для рисования прямоугольника r красным пером толщиной 3 пикселя, используя графический контекст («холст») g. Метод DrawLine рисует линию, соединяющую две точки с заданными координатами (метод перегружен). DrawLine(Pen, Point, Point); DrawLine(Pen, PointF, PointF); DrawLine(Pen, int, int, int, int); DrawLine(Pen, float, float, float, float); Первый параметр задает инструмент для рисования линии – перо. Остальные параметры методов DrawLine задают координаты соединяемых точек. Эти координаты могут быть заданы как объекты класса Point и PointF, а также в виде целых чисел и чисел с плавающей десятичной точкой. Рисование прямой линии Класс Brush определяет объекты, которые используются для заливки внутри графических фигур, таких как прямоугольники, эллипсы, круги, многоугольники и дорожки. Это абстрактный базовый класс, который не может быть реализован. Для создания объекта «кисть» используются классы, производные от Brush, такие как SolidBrush, TextureBrush и LinearGradientBrush, например: SolidBrush br = new SolidBrush(Color.Aqua); g.FillRectangle(br, r); // закраска прямоугольника r на «холсте» g Или без явного объявления объекта «кисть» br: g.FillRectangle(new SolidBrush(Color.Red), r);Класс BrushРисование прямой линии private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.Yellow); g.DrawLine(new Pen(Brushes.Blue, 2), 10, 20, 200, 30); } или Graphics g = e.Graphics; g.Clear(Color.Yellow); Pen myPen = new Pen(Color.Red, 2); g.DrawLine(myPen, 30, 50, 30, 150); Метод DrawRectangle позволяет рисовать прямоугольники, заданные координатой верхнего левого угла, а также шириной и высотой. В библиотеке классов .NET Frameworks имеется три перегруженных варианта этого метода: DrawRectangle(Pen, Rectangle); DrawRectangle(Pen, int, int, int, int); DrawRectangle(Pen, float, float, float, float); В качестве первого параметра этим методам передается перо класса Pen. Остальные параметры задают расположение и размеры прямоугольника. Класс Rectangle используется для описания расположения и размеров прямоугольной области. Свойства X и Y этого класса задают координаты верхнего левого угла прямоугольной области, соответственно, по горизонтальной и вертикальной оси координат.Рисование прямоугольника private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.Yellow); Pen myPen = new Pen(Color.Red, 2); g.DrawRectangle(myPen, 10, 10, 200, 50); //незакрашеный прямоугольник g.FillRectangle(Brushes.Blue, 10, 70, 200, 80); //закрашеный прямоугольник }Рисование прямоугольника Метод DrawEllipse рисует эллипс, вписанный в прямоугольную область, расположение и размеры которой передаются ему в качестве параметров. Предусмотрено четыре перегруженных варианта метода DrawEllipse: DrawEllipse(Pen, Rectangle); DrawEllipse(Pen, RectangleF); DrawEllipse(Pen, int, int, int, int); DrawEllipse(Pen, float, float, float, float); Эти методы отличаются только способом, при помощи которого описывается расположение и размеры прямоугольной области, в которую вписан эллипс.Рисование эллипсаРисование эллипса private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.Yellow); Pen myPen = new Pen(Color.Red, 2); g.DrawEllipse(myPen, 100, 100, 100, 100); //незакрашенный эллипс g.FillEllipse(Brushes. LightGray, 50, 50, 50, 50); //закрашенный эллипс } При помощи метода DrawArc программа может нарисовать сегмент эллипса. Сегмент задается при помощи координат прямоугольной области, в которую вписан эллипс, а также двух углов, отсчитываемых в направлении против часовой стрелки. Первый угол Angle1 задает расположение одного конца сегмента, а второй Angle2 – расположение другого конца сегмента.Рисование сегмента эллипса Предусмотрено четыре перегруженных варианта метода DrawArc: DrawArc(Pen, Rectangle, float, float); DrawArc(Pen, RectangleF, float, float); DrawArc(Pen, int, int, int, int, int, int); DrawArc(Pen, float, float, float, float, float, float); Первый параметр метода DrawArc определяет перо, с помощью которого будет нарисован сегмент. Расположение и размеры прямоугольной области передаются методу DrawArc аналогично тому, как это делается для рассмотренного выше метода DrawEllipse.Рисование сегмента эллипса private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.Clear(Color.Yellow); Pen myPen = new Pen(Color.Red, 2); g.DrawArc(myPen, 10, 10, 200, 150, 30, 270); // незамкнутый сегмент эллипса g.DrawPie(myPen, 30, 30, 100, 110, 20, 200); //незакрашеный замкнутый сегмент эллипса g.FillPie(Brushes.Green, 170, 10, 200, 150, 0, 120); // закрашеный замкнутый сегмент эллипса }Рисование сегмента эллипса Метод DrawPolygon поможет Вам в тех случаях, когда нужно нарисовать многоугольник, заданный своими вершинами. Предусмотрено два варианта этого метода: DrawPolygon(Pen, Point[]); DrawPolygon(Pen, PointF[]); В первом случае методу DrawPolygon через второй параметр передается массив точек класса Point, в котором
координаты точек заданы целыми числами, а во втором – массив класса PointF, где координаты соединяемых точек задаются в виде числа с плавающей десятичной точкой.
Рисование многоугольника
Многоугольник DrawPolygon.
В нем определили перо myPen
и массив точек myPoints.
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.Yellow);
Pen myPen = new Pen(Color.Red, 2);
Point[] myPoints =
{
new Point(40, 50),
new Point(50, 60),
new Point(60, 40),
new Point(70, 60),
new Point(80, 40),
new Point(90, 60),
new Point(120, 70),
new Point(100, 90),
new Point(50, 90),
};
g.DrawPolygon(myPen, myPoints);
g.FillRectangle(Brushes.Black, 100,75, 5, 5);
}
Рисование многоугольника
Методы для рисования закрашенных фигур
В классе Graphics определен ряд методов, предназначенных для рисования закрашенных фигур.
Есть два отличия методов с префиксом Fill от одноименных методов с префиксом Draw. Прежде всего, методы с префиксом Fill рисуют закрашенные фигуры, а методы с префиксом Draw – не закрашенные. Кроме этого, в качестве первого параметра методам с префиксом Fill передается не перо класса Pen, а кисть класса Brush.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|