|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.04.2009, 14:44 | #1 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Рисовать поверх TImage
Нужно загрузить картинку на форму, чтобы потом пользователь мог ручками "векторизовать" ее - то есть обвести контуры с помощью мыши. Эти контуры удобнее прорисовывать в OnPaint, а картинку загружать 1 раз в TImage, чтобы не мерцала. Так вот - можно ли сделать так, чтобы линии прорисовывались поверх картинки?
|
07.04.2009, 03:33 | #2 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
В общем если не вдаваться в подробности, то примерно так:
Код:
|
07.04.2009, 04:00 | #3 | |
Студент, не
Старожил
Регистрация: 29.01.2009
Сообщений: 2,067
|
Цитата:
Только, как уже отметил Баламут, с jpg-файлами глюк будет... Может что-то вроде такого..? Код:
I am the First of Cyber Evolution...
I am the First to Program your Future... |
|
07.04.2009, 07:15 | #4 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
Хотелось бы обратить внимание на некоторые особенности.
В вопросе есть пара ложных утверждений (утверждения не соответствующие действительности). "Эти контуры удобнее прорисовывать в OnPaint". Событие это генерирует Windows и зависеть от того когда оно придет в программу совсем даже неудобно, тем более, что событие относится к форме, а не к тому компоненту, на котором происходит рисование. "а картинку загружать 1 раз в TImage, чтобы не мерцала". Мерцание изображения зависит не только от того сколько раз загружена картинка, а от многих других условий. В частности, если картинка загружена в TImage, то она принадлежит свойству Picture, а не Canvas. От этого прорисовка картинки происходит каждый раз как только над Canvas TImage производятся какие-либо действия, из-за того что наличие таких свойств в TImage как Stretch, Autosize, Transparent заставляет Windows "подстраивать" находящееся в TImage изображение (хотя в этом нет необходимости, но это - Windows). Отсюда и мерцание. Достаточно поместить картинку на Canvas TImage и мерцание при рисовании "обводки" прекратится. Одно из решений: Загрузить изображение на Canvas любого компонента, у которого есть свойство Canvas и события OnMouseDown, OnMouseUp и OnMouseMove (идеально по таким условиям подходит TPaintBox, в примере, правда, используется TImage). Код:
Код работающий без мерцания, при условии, что изображение формата bitmap загружено на Canvas TImage, а не в его Picture. |
07.04.2009, 10:17 | #5 |
Форумчанин
Регистрация: 12.05.2007
Сообщений: 373
|
дабы издавиться от ненужного мерцания достаточно лишь DoubleBuffered почтавить в True.
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен: "Перемен!Мы ждем перемен!" |
08.04.2009, 20:02 | #6 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Действительно, чтобы избавиться от мерцания, этого более чем достаточно. Что же касается рисования, то на канве компонента TImage я не рисую, потому как он хранит изображение неизменным, а мне нужно будет эти линии потом редактировать с помощью мыши. Проще сохранять данные о расположении линий в каких-то структурах и рисовать их всех в событии OnPaint. Потому я поместила поверх TImage TPaintBox, и рисую в его обработчике OnPaint.
Последний раз редактировалось odi_noki; 08.04.2009 в 20:18. |
08.04.2009, 22:46 | #7 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 38
|
целесообразней будет иметь два "холста". в одном хранить исходную картинку, а на втором рисовать необходимое. после объединять эти два рисунка и выводить на канву необходимого элемента
... например: Код:
а елси в дальнейшем тебе необходимо редактировать линиии или то что ты нарисовал... то, действительно, всё придется сохранять в определенную структуру... поищи "создание графического редактора"... есть много статей на эту тему
Чем меньше вы знаете, тем больше я ценен как специалист...
|
09.04.2009, 09:25 | #8 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Niarb,
идея ясна, но объясните, в чем ее эффективность по сравнению с прорисовкой на разных компонентах. И еще - думаю, что нужно сделать и поддержку jpeg тоже... |
09.04.2009, 22:28 | #9 |
Пользователь
Регистрация: 23.02.2009
Сообщений: 38
|
про эфективность... это в разы быстрее
про поддержку Jpeg Код:
Чем меньше вы знаете, тем больше я ценен как специалист...
|
09.04.2009, 23:05 | #10 |
Пользователь
Регистрация: 23.06.2008
Сообщений: 77
|
Все хорошо, только вот качество выводимого на экран jpg оставляет желать лучшего. Цвета искажаются, пороги появляются. Может быть, какие-нибудь свойства TJpegImage помогут?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
рисовать в design-time (Paint) | NieL | Общие вопросы Delphi | 1 | 15.01.2009 16:55 |
Рисовать на видео | Tmt | Общие вопросы Delphi | 5 | 07.02.2007 11:31 |