Проверка попадания в область изображения
Проверка попадания в область изображения
Проверить попадание в область типа, производного от 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;
}
}
}
В данный момент вы уже можете запустить свое приложение и убедиться в том, что контур появляется вокруг каждого изображения, на котором был выполнен щелчок (и что никакого контура не появляется, когда вы щелкаете за пределами этих изображений).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Область
Область Области – это элементы, структурирующие страницу по вертикали и помогающие дизайнеру визуально распределить элементы по оси Y. Размеры областей можно рассчитывать несколькими способами, но наиболее эффективным считается золотое
Область редактирования
Область редактирования Область редактирования создается парным тегом <TEXTAREA>:<TEXTAREA [ROWS="<высота>"] [COLS="<ширина>"] [WRAP="off|soft|hard"] [TABINDEX="<номер в порядке обхода>"] [ACCESSKEY="<быстрая клавиша>"] [DISABLED] [READONLY] [AUTOFOCUS]><изначальное значение></TEXTAREA>Значение, которое
Область уведомлений
Область уведомлений Область уведомлений находится справа на Панели задач. На ней располагаются значки программ, продолжающих свою работу после закрытия их окон. Другими словами – значки программ, работающих в фоновом режиме. Кроме того, в области уведомлений размещены
8.4. Область уведомлений
8.4. Область уведомлений Как и в предыдущих версиях операционной системы, в Windows 7 также есть область уведомлений, которая используется для отображения значков программ и системных компонентов, присутствие которых там желательно или необходимо.Любая программа, которая
Область Вернике
Область Вернике Специалисты по нейробиологии познания считают, что наши мысли состоят не из слов и не из картинок. Человеческое мышление – это последовательность мысленных образов, сменяющих друг друга со скоростью света.Каждый из этих образов заключает в себе
Проверка попадания в диапазон. Предикат BETWEEN.
Проверка попадания в диапазон. Предикат BETWEEN. Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND. Естественно, как и для предиката сравнения, выражения в предикате BETWEEN
Область
Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region на панели инструментов Draw.Над созданными областями можно
Проверка попадания в область, отличную от прямоугольной
Проверка попадания в область, отличную от прямоугольной Теперь давайте выясним, как выполнить проверку попадания в область, форма которой отличается от прямоугольника? Предположим, что вы обновили свое приложение так, что теперь в нем отображается геометрический шаблон
Область
Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region на панели инструментов Draw.Над созданными областями можно
Область
Область Областью называются плоские замкнутые объекты, которые образуются из нескольких двумерных объектов. Команда REGION формирует область и вызывается из падающего меню Draw ? Region или щелчком на пиктограмме Region панели инструментов Draw.Над созданными областями можно
1 Область применения
1 Область применения Настоящий стандарт применяется для пакетов программ. Например, для текстовых процессоров, электронных таблиц, программ баз данных, графических пакетов, программ, реализующих технические и научные функции, и для сервисных программ (утилит).Стандарт
1 ОБЛАСТЬ ПРИМЕНЕНИЯ
1 ОБЛАСТЬ ПРИМЕНЕНИЯ Настоящий стандарт определяет шесть характеристик, которые с минимальным дублированием описывают качество программного обеспечения. Данные характеристики образуют основу для дальнейшего уточнения и описания качества программного обеспечения.