Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Вниз

Деление изображения на области   Найти похожие ветки 

 
DProg   (2003-08-20 16:28) [0]

Доброго времени суток.
Поставили задачу, хочу посоветоваться:

1. Пользователь видит на экране картинку. Картинка разделена на отдельные области. Например географическая карта, на которой несколько стран. При перемещении мышки пользователь видит хинт страны над которой находится мышка. При щелчке на стране открывается новое окно с описанием этой страны.

2. Картинки (карты), описания могут добавляться.

3. Описания картинок, границ стран, описаний стран хранятся в произвольном формате.

Не подскажете, нет ли каких либо средств (компонентов) для Delphi, которые помогут это реализовать?


 
Vlad Oshin   (2003-08-20 16:36) [1]

первое что приходит в голову - регионы
CreatePolygonRgn
CombineRgn


 
Jeer   (2003-08-20 16:37) [2]

Второе, что приходит в голову - ГИС-ы.


 
y-soft   (2003-08-20 16:43) [3]

Или так, как сказал Vlad Oshin © (20.08.03 16:36) [1], или нечто подобное, но без создания регионов: создается не одна, а 2 картинки (вторая в памяти), на 2-й картинке области выводятся каждая своим уникальным цветом, затем отлавливается положение курсора на первой картинке и проверяется по координатам цвет точки на второй картинке...

При большом количестве стран, такой подход работает быстрее (но и памяти кушает больше)


 
DProg   (2003-08-20 16:48) [4]

Если нет компонентов, то начать наверное надо с мыслей о редакторе для создания описания регионов. Надо показать пользователю карту и чтобы он последовательно каждую страну обвел... По MouseMove сохранять координаты?


 
DProg   (2003-08-20 16:50) [5]

Как понять что он обвел всю страну? Ну, что получилась замкнутая область?


 
y-soft   (2003-08-20 16:53) [6]

>DProg (20.08.03 16:50) [5]

А если страна с анклавами (как ЮАР) или состоит из нескольких несвязанных частей (как пример - США)?


 
DProg   (2003-08-20 16:58) [7]

> y-soft
Ну это уже тонкости... Сделаем операцию добавления области к стране. На самом деле у меня не страны, но на странах просто удобно обсуждать.

И еще: Наверное имеет смысл хранить не все точки, о снимать координаты по таймеру через определенный промежуток времени?


 
alxx   (2003-08-20 17:01) [8]

Я примерно этим сейчас занимаюсь. Рабочая редактора уже готова. Щелчок на полигоне отлавливается хорошо.


 
y-soft   (2003-08-20 17:02) [9]

DProg (20.08.03 16:58) [7]
Лучше сохранять по нажатию кнопки "ОК". Фигуру замыкать принудительно, если координаты начальной и конечной точки не совпадают.

Можно хранить не точки, а сразу изображения (как я писал ранее)...


 
DProg   (2003-08-20 17:02) [10]

Можно посмотреть?


 
DProg   (2003-08-20 17:06) [11]

> alxx
Можно посмотреть?
> y-soft
>Фигуру замыкать принудительно...
Да, действительно! Спасибо.
А изображения хранить накладно, к тому же надо будет это писать в базу. С помощью таймера можно будет минимизировать количество точек с требуемой точностью. Предположим, что все мышкой двигают примерно с одной скоростью.


 
alxx   (2003-08-20 17:08) [12]

> DProg
Если качну тебе проект - меня уроют. Могу попробовать сбацать демку для, скажем, трех полигонов...


 
y-soft   (2003-08-20 17:15) [13]

>DProg (20.08.03 17:06) [11]

Если хранить в WMF, то не очень-то и накладно.

Вообще, если количество точек мало, то выгодней хранить координаты (или, что почти то же самое, в векторном формате) и проверять по нахождению точки в регионе.

А если точек много, то выгодней хранить сжатый растр (gif например) и определять по цвету точки...


 
DProg   (2003-08-20 17:23) [14]

Буду хранить координаты. Будут две связанные таблицы - страны и координаты границ страны.
Еще вопрос. Как потом быстро определить, над каким из регионов находится мышка, если известны координаты границы регионов?


 
alxx   (2003-08-20 17:28) [15]

Определять по цвету точки - нехороший способ. Нужно хранить буфер какой-то. Рисовать два раза или таблицу цветов держать.

А мат. способ проверки попадания в полигон можно реализовать с минимумом операций (с одним целочисленным умножением и одним целочисленным делением на одну вершину).

Если полигоны хранятся в таблице БД, то о приемлемой скорости рисования можно забыть (хотя если до ста полигонов, то может быть нормально).


 
y-soft   (2003-08-20 17:28) [16]

>DProg (20.08.03 17:23) [14]

PtInRegion

Но еще раз подчеркну, что регионы штука тяжеловесная и ресурсоемкая...


 
y-soft   (2003-08-20 17:30) [17]

>alxx © (20.08.03 17:28) [15]

У каждого способа своя область применения...


 
alxx   (2003-08-20 17:50) [18]

> y-soft

Эт точно :)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
14-24660
nikkie
2003-08-20 14:02
2003.09.08
не так давно тут мишек обсуждали


3-24315
Maksim
2003-08-13 12:50
2003.09.08
Как из Delphi грамотно инициализировать атрибуты объекта Oracle??


3-24381
Alexei Sviridov
2003-08-15 02:31
2003.09.08
DBGrid


3-24385
KublaKhan
2003-08-15 16:43
2003.09.08
Visual Foxpro


7-24715
Булат
2003-06-24 10:18
2003.09.08
Как определить тип корпуса - АТ или АТХ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский