Опубликован: 14.12.2009 | Уровень: для всех | Доступ: платный
Лекция 5:

Программирование в .NET Framework

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >

Рисование

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

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

Векторная графика — это изображения, составленные из геометрических фигур: линий, окружностей, прямоугольников и т. д. Например, план дома удобно представлять в виде векторного изображения.

Для начала продемонстрируем работу с растровой графикой. На компьютере часто приходится выполнять обработку изображений, например, фотографий. Для этого в библиотеке классов .NET Framework имеется немало полезных средств.

Пример программы 3.8

Для создания программы, отображающей на форме рисунок, хранящийся в файле, нам понадобится специальный элемент управления. Для этой цели прекрасно подходит PictureBox.

using System;
using System.Windows.Forms;
using System.Drawing;

class PictureDisplayer : Form
{
  Bitmap image1;
  PictureBox pictureBox1;
  
  // Метод-конструктор нашего класса
  public PictureDisplayer()
  {
    // Указываем размеры и заголовок окна
    
    this.Text = "Искусство аборигенов";
    this.Size = new Size(302, 240);
    
    // Подготавливаем поле для размещения изображения
    
    pictureBox1 = new PictureBox();
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    pictureBox1.BorderStyle = BorderStyle.Fixed3D;
    pictureBox1.ClientSize = new Size(300, 196);
    
    // Добавляем изображение в элемент PictureBox
    
    image1 = new Bitmap(@"../../images/Iskusstvo.jpg");
    pictureBox1.Image = (Image)image1;
    
    // Добавляем PictureBox (с изображением) на форму
    
    this.Controls.Add(pictureBox1);
  }
  static void Main()
  {
    // Создаем и запускаем форму
    Application.Run(new PictureDisplayer());
  }
}
Листинг 3.8.

Пример программы 3.9

Следующая программа загружает фотографию с диска и после нажатия кнопки "flip" (Перевернуть) позволяет получить ее зеркальное отражение, расположенное по горизонтали:

using System;
using System.Windows.Forms;
using System.Drawing;

class PictureFlipper : Form
{
  Button button1;
  Bitmap image1;
  PictureBox pictureBox1;
  
  // Метод-конструктор нашего класса
  public PictureFlipper()
  {
    // Указываем размеры и заголовок окна
    
    this.Text = "Поворот рисунка";
    this.Size = new Size(302, 240);
    
    // Добавляем на форму кнопку
    
    button1 = new Button();
    button1.Text = "Поворот рисунка";
    button1.Location = new Point(100, 150);
    button1.Size = new Size(70, 40);
    button1.Click += new System.EventHandler(button1_Click);
    this.Controls.Add(button1);
    
    // Добавляем элемент PictureBox на форму
    
    pictureBox1 = new PictureBox();
    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
    pictureBox1.BorderStyle = BorderStyle.Fixed3D;
    pictureBox1.ClientSize = new Size(300, 196);
    
    // Добавляем изображение в элемент PictureBox
    
    image1 = new Bitmap(@"../../images/Giraf.jpg");
    pictureBox1.Image = (Image)image1;
    
    // Добавляем на форму элемент PictureBox
    
    this.Controls.Add(pictureBox1);
  }
  static void Main()
  {
    // Создаем и запускаем форму
    Application.Run(new PictureFlipper());
  }
  
  // Обработчик события, срабатывающий при нажатии кнопки
  void button1_Click(object sender, EventArgs e)
  {
    // Отображает изображение относительно оси X (горизонтально)
    image1.RotateFlip(RotateFlipType.RotateNoneFlipX);
    
    // Повторно вставляем изображение в элемент PictureBox
    pictureBox1.Image = (Image)image1;
    
    // Обновляем заголовок окна
    this.Text = "Рисунок после поворота!";
  }
}
Листинг 3.9.

Теперь перейдем к примерам работы с векторной графикой — изображениям, составленным из геометрических фигур.

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

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

  1. В обычном мире, прежде чем нарисовать линию, окружность, прямоугольник или иную фигуру, необходимо выбрать карандаш нужного цвета с грифелем определенной толщины. Для отрисовки на компьютере простейших фигур надо сначала создать объект Pen ( Перо ). Например, с помощью данного фрагмента кода создается объект Pen, который рисует зеленую линию толщиной 3 пикселя:
    Pen myGreenPen = new Pen(Color.Green, 3);
  2. Для рисования фигур с заливкой потребуется нечто вроде кисти с красками. Предварительно следует создать объект Brush ( Кисть ), а затем выбрать цвет заливки и один из многочисленных типов кисти. В следующем фрагменте кода создается объект SolidBrush ( Сплошная кисть ) голубого цвета:
    SolidBrush myBlueBrush = new SolidBrush(Color.Blue);

Пример программы 3.10

В этой программе в методе, названном DrawSomeShapes, рисуется линия, прямоугольник и эллипс.

using System;
using System.Windows.Forms;
using System.Drawing;

class SimpleShapeMaker : Form
{
  // Метод-конструктор нашего класса
  public SimpleShapeMaker()
  {
    // Меняем цвет фона формы на белый
    
    this.BackColor = Color.White;
    
    // Добавляем на форму кнопку и привязываем ее к обработчику событий
    
    Button button1 = new Button();
    button1.Text = "Будем рисовать!";
    button1.Location = new Point(110, 10);
    button1.Size = new Size(70, 40);
    button1.BackColor = Color.LightGray;
    button1.Click += new System.EventHandler(button1_Click);
    this.Controls.Add(button1);
  }
  
  // Обработчик события, срабатывающий при нажатии кнопки
  void button1_Click(object o, System.EventArgs e)
  {
    // Вызов метода
    DrawSomeShapes();
  }
  
  // Метод для отрисовки на поверхности формы нескольких фигур
  void DrawSomeShapes()
  {
    // Подготовка области рисования на форме
    Graphics g = this.CreateGraphics();
    
    // Подготавливаем перо, рисующее красную линию толщиной 3 пикселя
    Pen redPen = new Pen(Color.Red, 3);
    
    // С помощью пера рисуем прямую линию, прямоугольник и эллипс
    g.DrawLine(redPen, 140, 170, 140, 230);
    g.DrawRectangle(redPen, 50, 60, 50, 60);
    g.DrawEllipse(redPen, 150, 100, 100, 60);
    
    // Очистка
    g.Dispose();
  }
  static void Main()
  {
    // Создаем и запускаем форму
    Application.Run(new SimpleShapeMaker());
  }
}
Листинг 3.10.

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Алексей Фролов
Алексей Фролов
Кристина Горбунова
Кристина Горбунова
Robert Hirsch
Robert Hirsch
Германия, Worzeldorf
Илья Фурса
Илья Фурса
Россия, Самара