Проверка попадания в область изображения

Проверка попадания в область изображения

Проверить попадание в область типа, производного от Control (например, типа PictureBox очень просто, поскольку такой тип может сам отвечать на события мыши. Но что делать в том случае, когда нужно выполнять проверку попадания в область геометрического шаблона, отображенного на поверхности формы?

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

Первым шагом должно быть определение нового множества членов-переменных типа Form, представляющих объекты Rectangle, для которых будет выполняться регистрация события MouseDown. При наступлении такого события нужно программно выяснить, находятся ли поступающие координаты (x, y) в рамках границ объектов Rectangle, используемых для визуализации объектов Image. Выяснив, что пользователь щелкнул на изображении, мы должны установить приватную булеву переменную (isImageClicked) равной true (истина) и указать, какое изображение было выбрано, используя для этого другую переменную и соответствующее значение из пользовательского перечня ClickedImage, определенного следующим образом.

enum ClickedImage {

 ImageA, ImageB, ImageC

}

С учетом сказанного, вот как может выглядеть исходная модификация нашего класса формы.

public partial class MainForm: Form {

 private Bitmap[] myImages = new Bitmap(3];

 private Rectangle[] imageRects = new Rectangle[3];

 private bool isImageClicked = false;

 ClickedImage imageClicked = ClickedImage.ImageA;

 public MainForm() {

  …

  // Установка прямоугольников.

  imageRects[0] = new Rectangle(10, 10, 90, 90);

  imageRects[1] = new Rectangle(10, 110, 90, 90);

  imageRects[2] = new Rectangle (10, 210, 90, 90);

 }

 private void MainForm_MouseDown(object sender, MouseEventArgs e) {

  // Получение координат (х, у) щелчка.

  Point mousePt = new Point(e.X, e.Y);

  // Проверка попадания указателя в любой из прямоугольников.

  if (imageRects[0].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = ClickedImage.ImageA;

   this.Text = "Вы щелкнули на изображении А";

  } else if (imageRects[1].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = Clickedlmage.ImageB;

   this.Text = "Вы щелкнули на изображении В";

  } else if (imageRects[2].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = ClickedImage.ImageC;

   this.Text = "Вы щелкнули на изображении C";

  } else { // Попадания не обнаружено, использовать умолчания.

   isImageClicked = false;

   this.Text = "Проверка попаданий в зону изображения";

  }

  // Обновление области клиента.

  Invalidate();

 }

}

Обратите внимание на то, что при последней проверке член-переменная isImagеCliсked устанавливается равной false (ложь), поскольку пользователь не выполнил щелчка ни одном из трех изображений. Это важно, если вы хотите удалить контур у ранее выделенного изображения. После проверки всех элементов область клиента обновляется. Вот как выглядит модифицированный обработчик Paint.

private void MainForm_Paint(object sender, PaintEventArgs e) {

 Graphics g = e.Graphics;

 // Визуализация изображений.

 …

 // Прорисовка контура (при щелчке в соответствующем месте)

 if (isImageClicked == true) {

  Pen outline = new Pen(Color.Tomato, 5);

  switch (imageClicked) {

  case ClickedImage.ImageA:

   g.DrawRectangle(outline, imageRects[0]);

   break;

  case Clickedlmage.ImageB:

   g.DrawRectangle(outline, imageRects[1]);

   break;

  case ClickedImage.ImageC:

   g.DrawRectangle(outline, imageRects[2]);

   break;

  default:

   break;

  }

 }

}

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1 ОБЛАСТЬ ПРИМЕНЕНИЯ

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. ПРОГРАММНЫЕ КОНСТРУКТИВЫ И УСЛОВНЫЕ ОБОЗНАЧЕНИЯ ДЛЯ ИХ ПРЕДСТАВЛЕНИЯ автора Госстандарт России


1 ОБЛАСТЬ ПРИМЕНЕНИЯ

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ ОЦЕНКА ПРОГРАММНОЙ ПРОДУКЦИИ ХАРАКТЕРИСТИКИ КАЧЕСТВА И РУКОВОДСТВА ПО ИХ ПРИМЕНЕНИЮ автора Автор неизвестен

1 ОБЛАСТЬ ПРИМЕНЕНИЯ Настоящий стандарт определяет шесть характеристик, которые с минимальным дублированием описывают качество программного обеспечения. Данные характеристики образуют основу для дальнейшего уточнения и описания качества программного обеспечения.


1 Область применения

Из книги Пакеты программ. Требования к качеству и тестирование автора Автор неизвестен

1 Область применения Настоящий стандарт применяется для пакетов программ. Например, для текстовых процессоров, электронных таблиц, программ баз данных, графических пакетов, программ, реализующих технические и научные функции, и для сервисных программ (утилит).Стандарт


1 ОБЛАСТЬ ПРИМЕНЕНИЯ

Из книги СРЕДСТВА ПРОГРАММНЫЕ СИСТЕМ ВООРУЖЕНИЯ. ПОРЯДОК РАЗРАБОТКИ автора Автор неизвестен


1 Область применения

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России


Проверка попадания в область, отличную от прямоугольной

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Проверка попадания в область, отличную от прямоугольной Теперь давайте выясним, как выполнить проверку попадания в область, форма которой отличается от прямоугольника? Предположим, что вы обновили свое приложение так, что теперь в нем отображается геометрический шаблон


Область уведомлений

Из книги Windows Vista автора Вавилов Сергей

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


Область

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region на панели инструментов Draw.Над созданными областями можно


Область Вернике

Из книги Добавьте в корзину. Ключевые принципы повышения конверсии веб-сайтов автора Айзенберг Джеффри

Область Вернике Специалисты по нейробиологии познания считают, что наши мысли состоят не из слов и не из картинок. Человеческое мышление – это последовательность мысленных образов, сменяющих друг друга со скоростью света.Каждый из этих образов заключает в себе


Область редактирования

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Область редактирования Область редактирования создается парным тегом <TEXTAREA>:<TEXTAREA [ROWS="<высота>"] [COLS="<ширина>"] [WRAP="off|soft|hard"] [TABINDEX="<номер в порядке обхода>"] [ACCESSKEY="<быстрая клавиша>"] [DISABLED] [READONLY] [AUTOFOCUS]><изначальное значение></TEXTAREA>Значение, которое


Область

Из книги Как спроектировать современный сайт автора Вин Чои

Область Области – это элементы, структурирующие страницу по вертикали и помогающие дизайнеру визуально распределить элементы по оси Y. Размеры областей можно рассчитывать несколькими способами, но наиболее эффективным считается золотое


Область

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region панели инструментов Draw.Над созданными областями можно


Область

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region на панели инструментов Draw.Над созданными областями можно


Проверка попадания в диапазон. Предикат BETWEEN.

Из книги Справка по SQL автора

Проверка попадания в диапазон. Предикат BETWEEN. Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND. Естественно, как и для предиката сравнения, выражения в предикате BETWEEN


8.4. Область уведомлений

Из книги Установка, настройка и восстановление Windows 7 на 100% автора Ватаманюк Александр Иванович

8.4. Область уведомлений Как и в предыдущих версиях операционной системы, в Windows 7 также есть область уведомлений, которая используется для отображения значков программ и системных компонентов, присутствие которых там желательно или необходимо.Любая программа, которая