![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Как можно нарисовать контур фигуры из файла png, gif?
Например: в файле изображения домик, вокруг него прозрачный цвет, как нарисовать только контур этого домика? И как задать координаты этого контура, чтоб при наведении в любую точку этого домика, выполнялись какие нибудь процедуры? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Это тебе надо у гугла поинтересоваться алгоритмами векторизации растровых изображений.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Хорошо...
А как получить контур круга и чтоб при наведении мышки на него вызывалась процедура? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Отлавливаешь событие MouseMove, из аргумента выясняешь где курсор, вычисляешь в круге или нет и в зависимости от результата выполняешь что нужно. (это для винформ, в впф, полагаю, и так все понятно).
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Это я понимаю, что надо отлавливать событие мышки, просто мне не понятно, как определить, что именно в круге она, это надо создать массив из точек? Или есть что то по проще, как например с прямоугольником?
|
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Если ты хочешь проверять, находится ли курсор на самом домике(у тебя есть готовое изображение), то не нужно никакой математики. Просто берешь позицию курсора по отношению к картинке и смотришь, что за пиксел под курсором. Если прозрачный, то курсор вне дома.
Если тебе обязательно надо нарисовать контур дома (хотя мне кажется тебе это не надо), то можно например попиксельно пройтись по изображению и цветной пиксел, у которого есть прозрачные соседние пикселы, можно закрасить. Если тебе обязательно надо математически определить, находится ли курсор внутри круга, то берешь функцию круга x^2+y^2=r^2, делишь на две функции и методами > и < определяешь, лежит ли он внутри круга (но мне кажется тебе этого не надо). А можно нарисовать круг в том же png и определять методом 1. Это сообщение отредактировал(а) Pilger - 20.7.2010, 00:14 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Тут есть ещё 1 загвозка, так как этот домик рисуется на фоне другого изображения, и поэтому никак не проверить пиксель под курсором... =0( Я знаю только 1 вариант такой проверки, это предварительно создать площадь домика, вычислить его координаты на изображении и просматривать где находится курсор, но в таком случае, будет притормаживать, да и объём кода у величется...
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Можно создать объект Region и проверять принадлежность точки этой области.
http://msdn.microsoft.com/ru-ru/library/8hedzh9a.aspx И кстати домик сам может быть контролом http://msdn.microsoft.com/ru-ru/library/sy...rol.region.aspx -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Ты не понял. Смотреть надо пиксел самого домика. Пусть у тебя там хоть 1000 различных картинок, которые помещены друг на дружке или рядом, их всё равно надо разделять. Ты смотришь пиксел самого дома, а там указано, где прозрачно, а где нет.
Детальнее. Картинка дома имеет прямоугольную форму. Смотришь позицию картинки на твоей форме. Смотришь позицию курсора на твоей форме. Если rectangle дома intersects курсор, это значит, что курсор находится на картинке, но не факт, что на самом доме. Тут то и надо посмотреть позицию курсора относительно самой картинки дома и посмотреть, какой цвет пикселя там находится. Вот и все. Изображения то разные. Какой смысл их объединять, что бы потом разделить и понять, где дом а где нет? А если у тебя два объекта находятся на одном изображении то ИМХО надо их сразу разделить. Это сообщение отредактировал(а) Pilger - 20.7.2010, 12:22 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| xXxSataNxXx |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 25.12.2009 Репутация: 1 Всего: 1 |
Всем спасибо, решил проблему переходом на XNA... Так на много проще, да и с графикой работа намного быстрее...
|
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
XNA и надо подключать, когда со сложной графикой работаешь. Метод, описанный выше, подходит идеально.
-------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
На счет сложности: не знаю, что уж там сложного с регионом, пример в аттаче, там я с помощью региона прорисовываю пятно и тот же регион использую для определения попадает в него курсор или нет. В зависимости от результата проверки перекрашиваю пятно.
Что до скорости, то у впф она не хуже чем у хны, да и проще уже и придумать нельзя. Присоединённый файл ( Кол-во скачиваний: 6 )
regionxmpl.rar 53,30 Kb-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Просто у PNG картинки уже вложенный "region" имеется. Достаточно посмотреть, что за пиксел под курсором (на картинке). Если прозрачный, то вне области.
На счет простоты тоже не понял. Быстрее да, но проще ли... В XNA таким же методом чаще всего пользуются, что бы определить попиксельное пересечение или столкновение. Да и XNA в общем то подключать действительно не обязательно, если нарисовать дом и определить область это всё что требуется, но это зависит от его задачи. Может там что то более сложное. WPF или XNA выбрать тоже от задачи зависит. С интерфейсом работать лучше с WPF. XNA с WinForm лучше контачит. А если просто нужно ускорить обрисовку (например избавиться от мерцания), то достаточно подключить XNA, кое что поменять и готово. И не придется переходить на WPF из за какой то мелочи. -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
А почему бы и не перейти? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Я имел в виду, что не придется переписывать весь проект под WPF. А знания конечно лишними не будут, ибо везде свои плюсы и минусы в зависимости от задачи.
-------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |