Рисованный Эллипс. Синтаксис метода:
g.DrawEllipse(pen, rect);
Здесь
g – переменная, определяющая, где рисуем,
DrawEllipse – метод рисования эллипса,
pen – перо,
rect – прямоугольная область, в которую вписывается эллипс.
21.3. Методы заливки
В C# определены методы заливки фигур. Все методы перегружаемые, то есть выполняются по-разному с разными аргументами.
В примерах заливка разных фигур осуществляется простой кистью с Brush.Cyan и кистью HatchBrush с разными стилями заливки DashStyle.
FillRectangle.
Закрашивает прямоугольник. Синтаксис метода:
g.FillRectangle (brush, p);
Здесь
g – переменная, определяющая, где рисуем,
FillRectangle – метод рисования залитого прямоугольника
brush – кисть,
p – массив точек.
Получаемый результат зависит от стиля заливки. Рисунок слева использована простая кисть с цветом Cyan (небесный). Справа использована кисть, у которой стиль заливки BacwardDiagonal (обратная диагональ), цвет переднего плана черный, фона белый.
FillEllipse.
Закрашивает эллипс. Синтаксис метода:
g.FillEllipse (brush, rect);
Здесь
g – переменная, определяющая, где рисуем,
FillEllipse – метод рисования залитого эллипса,
brush – кисть,
rect – прямоугольная область, в которую вписывается эллипс/
Получаемый результат зависит от стиля заливки. Рисунок слева использована простая кисть с цветом Cyan. Справа использована кисть, у которой стиль заливки DiagonalCross (диагональная сетка), цвет переднего плана черный, фона белый.
21.4. Рисование с помощью примитивов
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing; // рисование
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
// обработчик события рисования на форме
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (Graphics g = e.Graphics) //Создание объекта типа График
{
using (Pen pen = new Pen(Color.Red)) //цвет карандаша
g.DrawLine(pen,0,0,200,100); //рисование линии
using (Pen pen = new Pen(Color.Blue))
g.DrawEllipse(pen, new Rectangle(50, 50, 100, 150)); //эллипс
using (Pen pen = new Pen(Color.Green))
g.DrawRectangle(pen, new Rectangle(150, 150, 120, 100));//прямоугольник
string s="Примитивы";
Font font=new Font("Arial",18,FontStyle.Bold);
SolidBrush brush = new SolidBrush(Color.Black);
float x = 120;
float y = 20;
g.DrawString(s, font, brush, x, y); //вывод текста в точку (x,y)
}
}
}
}
21.5. Рисование графика функции
Рассмотрим пример программы, которая на форме Windows при соответствующем выборе из списка рисует два графика: sin(x) и cos(x) с текстовыми заголовками. Форма включает контейнер-список «Выбор графика» и кнопку с надписью «Построить», которая запускает обработчик, выполняющий все операции.
В обработчике событий выполняются следующие действия:
Вычисляется функция.
Задается ссылка на объект графики.
Выводится текст заголовка.
Рисуются координатные оси.
Рисуется график функции.
Листинг программы:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
comboBox1 button1
namespace WindowsFormsApplication1
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int imax = 100; //число точек в периоде
int t = 2; //число периодов
int amp = 80; //амплитуда
int h = 40; //отступ для текста
int x0 = 20; //начала координат
int y0 = h + amp;
double[] f = new double[imax * t + 10]; //массив точек
if (comboBox1.Text == "sin(x)") если из списка выбрать строку "sin(x)"
{ // Расчет массива точек для графика "sin(x)"
for (int i = 0; i < imax * t; i++)
{
f[i] = Math.Round(amp * Math.Sin(2 * Math.PI / imax * i));
}
// Инструменты рисования
Graphics g = Graphics.FromHwnd(this.Handle); // Где рисуем
Pen pen = Pens.Black; // Чем рисуем
// Текст заголовка
g.DrawString("График синусоиды", new Font("Arial", 14), Brushes.Red, 40, 0);
// Рисуем график "sin(x)"
g.DrawLine(pen, x0, y0, x0 + imax * t, y0); //Рисуем ось X
g.DrawLine(pen, x0, y0 - amp, x0, y0 + amp); //Рисуем ось Y
g.DrawString("Y", new Font("Arial", 10), Brushes.Black, 10, 20);
g.DrawString("X", new Font("Arial", 10), Brushes.Black, x0 + imax * t, y0);
for (int i = 0; i < imax * t; i++) //Рисуем график
{
int f1 = y0 - (int)f[i]; //Координата Y[i]
int f2 = y0 - (int)f[i + 1]; //Координата Y[i+1]
g.DrawLine(pen, x0 + i, f1, x0 + i + 1, f2);
}
}
else if (comboBox1.Text == "cos(x)") если из списка выбрать строку "cos(x)"
{ // Расчет массива точек для графика "cos(x)"
for (int i = 0; i < imax * t; i++)
{
f[i] = Math.Round(amp * Math.Cos(2 * Math.PI / imax * i));
}
// Инструменты рисования
Graphics g = Graphics.FromHwnd(this.Handle); // Где рисуем
Pen pen = Pens.Black; // Чем рисуем
// Текст заголовка
g.DrawString("График косинусоиды", new Font("Arial", 14), Brushes.Blue, 40, 0);
// Рисуем график "cos(x)"
g.DrawLine(pen, x0, y0, x0 + imax * t, y0); //Рисуем ось X
g.DrawLine(pen, x0, y0 - amp, x0, y0 + amp); //Рисуем ось Y
g.DrawString("Y", new Font("Arial", 10), Brushes.Black, 10, 20);
g.DrawString("X", new Font("Arial", 10), Brushes.Black, x0 + imax * t, y0);
for (int i = 0; i < imax * t; i++) //Рисуем график
{
int f1 = y0 - (int)f[i]; //Координата Y[i]
int f2 = y0 - (int)f[i + 1]; //Координата Y[i+1]
g.DrawLine(pen, x0 + i, f1, x0 + i + 1, f2);
}
}
}
}
}
При запуске отображается форма, в которой при выборе типа графика рисуется соответствующий график.
Пример. Создать программу отображения диаграммы двух функций sin(x) и cos(x) с использованием компонента Chart.
Проект – WindowsForm приложение. Стиль линий Spline.
Создаем – WindowsForm приложение. В форму заносим компоненты chart1 для отображения диаграммы и button1 для создания стартового обработчика событий.
В окне компонента chart1 в разделе Series определяем коллекцию из двух серий:
Для 1-й функции с именем sin(x).
Для 2-й функции с именем cos(x).
Стартовая форма
Изменение свойств графиков
using System;
…..
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double y = 0;
for (int x = 0; (x <= 19); x++) //цикл по оси х
{
y = Math.Sin(Math.PI / 5 * x); //расчет у 1-го графика
chart1.Series["sin(x)"].Points.AddXY(x, y);
y = Math.Cos(Math.PI / 5 * x); //расчет у 2-го графика
chart1.Series["cos(x)"].Points.AddXY(x, y);
}
}
}
}
Компонент chat с помощью окна Свойства позволяет менять цветовую гамму и тип графика выбранной серии в коллекции.
21.6. Растровая графика
Для растровой графики применяются различные форматы:
Bitmap (bmp), пиксельная графика.
TIFF
GIF
PNG
JPEG
BMP (Bitmap Picture) — формат хранения растровых изображений в виде пикселей. С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы.
TIFF (Tagged Image File Format) — формат хранения с использованием тегов. TIFF стал популярным форматом для хранения изображений с большой глубиной цвета.
GIF (Graphics Interchange Format) — формат для обмена изображениями. Формат GIF способен хранить сжатые данные без потери качества в формате до 256 цветов, что позволяет неплохо сжимать файлы, в которых много однородных заливок (логотипы, надписи, схемы). Формат GIF поддерживает анимационные изображения.
PNG (portable network graphics) — растровый формат хранения графической информации, использующий сжатие без потерь. PNG был создан как для улучшения,
JPEG (Joint Photographic Experts Group, по названию организации-разработчика) — один из популярных графических форматов, применяемый для хранения фотоизображений. Алгоритм JPEG является алгоритмом сжатия данных с потерями.