Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/14: Рейтинг темы: голосов - 14, средняя оценка - 4.50
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
1

Выделение толстой рамкой части изображения

20.10.2010, 16:52. Показов 2784. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, столкнулся казалось бы с ерундой, но не очень понимаю как лучше сделать.
На форме есть Image1 (картинка), нужно сделать чтобы мышкой можно было выделять ее часть. С помощью DrawFocusRect сделал выделение, но слишком тонкая линия получается. Хочется, чтобы можно было выделять потолще и наверное даже лучше не XOR'ить цвета, а рамку рисовать одним (например красным). Но можно и толстую XOR.

Решение в лоб - сохранять исходное изображение, на нем рисовать толстый прямоугольник и если мышка сдвинулась - восстанавливать старое и рисовать новый прямоугольник. Но мне кажется, что это не совсем оптимально в плане скорости. Может еще идеи будут?

Еще, как вариант рисовать той-же DrawFocusRect, но только вызывать ее 3 раза с координатами X-1, X, X+1 (для например ширины рамки в 3 пикселя). Но тоже это как-то коряво на мой взгляд...

Может быть уже кто-то делал?

Добавлено через 3 часа 29 минут
Наверно промахнулся с разделом. Просьба к модераторам перенести по возможности в раздел "Delphi: графика, звук, видео ", спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2010, 16:52
Ответы с готовыми решениями:

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

Выделение части изображения
Привет, пишу скриншоттер. Сам новичок в C#. Суть задачи в том, чтобы выбрать область изображения,...

Работа с pictureBox (выделение части изображения)
Здравствуйте, уважаемые форумчане. У меня появилась проблема с выделением участка картинки в...

Как сделать выделение и перемещение части изображения (QImage)?
Я пытаюсь создать свой графический редактор (что-то вроде Paint'a). Необходимо сделать выделение...

5
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
20.10.2010, 17:38 2
Цитата Сообщение от Tronix Посмотреть сообщение
Решение в лоб - сохранять исходное изображение, на нем рисовать толстый прямоугольник и если мышка сдвинулась - восстанавливать старое и рисовать новый прямоугольник. Но мне кажется, что это не совсем оптимально в плане скорости. Может еще идеи будут?
Да. Рисовать исходное изображение, потом поверх него рамку в позиции курсора. На исходном изображении уж точно рисовать нет смысла чтобы потом его восстанавливать.
И еще:
При этом, так как рисуете через XOR, не вижу смысла в восстановлении исходного изображения вообще. Повторный XOR того же цвета уберет рамку обратно.

Итого:
- Рисуем на TImage рамку через XOR:
Pascal
1
2
pen.width := 3;
pen.Color := clRed;
- Запоминаем позицию.
- Если позиция изменилась - повторяем пукт один.
- Передвигаем позицию.
- Все с начала алгоритма.
0
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
20.10.2010, 17:45  [ТС] 3
Цитата Сообщение от Darthman Посмотреть сообщение
Итого:
- Рисуем на TImage рамку через XOR:
Pascal
1
2
pen.width := 3;
pen.Color := clRed;
- Запоминаем позицию.
- Если позиция изменилась - повторяем пукт один.
- Передвигаем позицию.
- Все с начала алгоритма.
Весь косяк в том, что для метода DrawFocusRect, как я понял не работают pen.width. Единственное только вызывать эту функцию раза три с координатами X-1, X, X+1 (для линии в 3 пикселя например), но мне кажется это то же как-то по быдлокодски получится (
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
20.10.2010, 17:52 4
Хохо... я скажу больше. Для ширины более чем 1 не работает возможность устанавливать штриховку для линии. Так что линии будут 3 пикселя, но не точками, а непрерывной линией. Посему рекомендую просто нарисовать Rectangle, предварительно увеличив размер pen.width до трех. То, как хотите сделать Вы - будет и для пользователя выглядеть жутко. Уверяю.
0
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
20.10.2010, 23:44  [ТС] 5
И все равно, с копированием-вставкой изображения получается неслабое мигание... Не знаю даже как быть то (
0
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
21.10.2010, 11:35 6
Копировать и вставить 1 раз только. Зачем это делать постоянно-то?
0
21.10.2010, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2010, 11:35
Помогаю со студенческими работами здесь

Выделение текста рамкой
При запуске выдаёт ошибку: no matching function for call to...

Выделение поля ввода рамкой
Добрый день) подскажите пожалуйста, как можно выделить поле ввода( input или select) в рамочку...

Выделение текста рамкой используя циклы
При запуске и написания имени выходит пустое место #include <iostream> #include <string> int...

Выделение ссылки при наведении курсором цветной рамкой
Здравствуйте уважаемые специалисты1 Наверняка Вы знаете как сделать что бы было Выделение ссылки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru