158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
|
|
1 | |
Выделение толстой рамкой части изображения20.10.2010, 16:52. Показов 2784. Ответов 5
Метки нет (Все метки)
Привет, столкнулся казалось бы с ерундой, но не очень понимаю как лучше сделать.
На форме есть Image1 (картинка), нужно сделать чтобы мышкой можно было выделять ее часть. С помощью DrawFocusRect сделал выделение, но слишком тонкая линия получается. Хочется, чтобы можно было выделять потолще и наверное даже лучше не XOR'ить цвета, а рамку рисовать одним (например красным). Но можно и толстую XOR. Решение в лоб - сохранять исходное изображение, на нем рисовать толстый прямоугольник и если мышка сдвинулась - восстанавливать старое и рисовать новый прямоугольник. Но мне кажется, что это не совсем оптимально в плане скорости. Может еще идеи будут? Еще, как вариант рисовать той-же DrawFocusRect, но только вызывать ее 3 раза с координатами X-1, X, X+1 (для например ширины рамки в 3 пикселя). Но тоже это как-то коряво на мой взгляд... Может быть уже кто-то делал? Добавлено через 3 часа 29 минут Наверно промахнулся с разделом. Просьба к модераторам перенести по возможности в раздел "Delphi: графика, звук, видео ", спасибо.
0
|
20.10.2010, 16:52 | |
Ответы с готовыми решениями:
5
Выделение части изображения Выделение части изображения Работа с pictureBox (выделение части изображения) Как сделать выделение и перемещение части изображения (QImage)? |
15 / 15 / 3
Регистрация: 19.10.2010
Сообщений: 82
|
||||||
20.10.2010, 17:38 | 2 | |||||
Да. Рисовать исходное изображение, потом поверх него рамку в позиции курсора. На исходном изображении уж точно рисовать нет смысла чтобы потом его восстанавливать.
И еще: При этом, так как рисуете через XOR, не вижу смысла в восстановлении исходного изображения вообще. Повторный XOR того же цвета уберет рамку обратно. Итого: - Рисуем на TImage рамку через XOR:
- Если позиция изменилась - повторяем пукт один. - Передвигаем позицию. - Все с начала алгоритма.
0
|
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
|
|
20.10.2010, 17:45 [ТС] | 3 |
Весь косяк в том, что для метода 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 | |
21.10.2010, 11:35 | |
Помогаю со студенческими работами здесь
6
Выделение текста рамкой Выделение поля ввода рамкой Выделение текста рамкой используя циклы Выделение ссылки при наведении курсором цветной рамкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |