Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 23:15   #1
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию Как сделать карту высот bmp-файла?!

Как сделать карту высот bmp-файла?! а именно: из имеющегося bmp файла построить рядышком в другом image градиентное распределение высот (из цветов, из которых состоит сам bmp) ???
Chester751 вне форума Ответить с цитированием
Старый 15.03.2013, 23:46   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А что такое высота применительно к графическому изображению? (понятно, что не его размер по вертикали в пикселях)
s-andriano вне форума Ответить с цитированием
Старый 16.03.2013, 09:22   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Учимся гуглить. http://www.alexeyspace.ru/programs/5/
phomm вне форума Ответить с цитированием
Старый 16.03.2013, 11:35   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

phomm, это Вы кому?
Если мне, то хочу заметить, что "карта высот bmp-файла" и "карта высот в формате bmp-файла" по смыслу не одно и то же.
В первом случае по имеющемуся bmp-файлу нужно построить карту высот, а во втором - эта карта уже содержится в файле и строить ее не нужно.
s-andriano вне форума Ответить с цитированием
Старый 16.03.2013, 16:02   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Хм.. да, действительно, некорректно понял слова тс, сейчас перечитал.

В общем случае тогда предложу примитивный вариант
Код:
for i := 0 to bmp.width - 1 do 
  for j := 0 to bmp.height - 1 do 
    inc(colors[colorindex(bmp.cavas.pixels[i,j])]);
colors - массив цветов, некоей размерности , по которой будем ориентироваться для построения "карты высот" , а colorindex - функция переводящая реальный 24битный цвет картинки в один из цветов из нашей размерности.
Банальный пример (в нем количество диапазонов цвета равно 16 в кубе):
Код:
function colorindex(col: tcolor): integer;
begin
  result := getr(col) div 16 + getg(col) div 16 * 16 + getb(col) div 16 *256;
end;
где getr getg getb - функции выделения байта канала цвета из переменной типа tcolor (где то были стандартные в дельфи).
В итоге получим массив , куда просуммированы все количество пикселей определённого диапазона цветов, сам массив размера количеств этих диапазонов.
Вывести его - легко, в цикле просто рисуем линию от низа до высоты = числу в массиве, цветом, соответствующим обобщённому цвету для всего диапазона
phomm вне форума Ответить с цитированием
Старый 16.03.2013, 16:52   #6
Chester751
Пользователь
 
Регистрация: 08.05.2012
Сообщений: 27
По умолчанию

phomm, спасибо! помогло!=)

ещё один вопрос по этой теме:
только учусь, поэтому спрашиваю.... стал разбирать программу "карта высот из bmp изображения" (вот ссылка из соседней темы:http://www.programmersforum.ru/showt...E2%FB%F1%EE%F2)

Можно ли на основе неё рядышком на форме сделать panel на которой изображен сам bmp-файл. по нему провести прямую мышкой а рядом в другой панельке сразу появился 2D профиль поверхности(ну то есть показать в срезе=)) битый час хочу сделать, но так и не получается...((
Chester751 вне форума Ответить с цитированием
Старый 16.03.2013, 17:13   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

phomm, Вы меня удивляете. (хотя, Chester751 удивляет еще больше - тем, что ему Ваше решение помогло)

С одной стороны, Вы знаете (а не предполагаете), что такое карта высот. С другой стороны, Вы предлагаете ТС не карту высот, а гистограмму распределения цветов.
Разница уже хотя бы в том, что карта высот - объект двумерный, а гистограмма - одномерный.
Кроме того, ТС пишет про градиентное распределение. В любом случае, градиент, насколько я понимаю, должен определяться в каждой из точек карты высот, т.е. поле градиентов тоже двумерно. Да и сам градиент - вектор, а потому его распределение должно также быть двумерным.

Но самое поразительное, что ТС утверждает, что одномерное распределение, не имеющее никакого отношения ни к карте высот, ни к градиентам, - именно то, что ему нужно.
s-andriano вне форума Ответить с цитированием
Старый 17.03.2013, 18:31   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Ввиду возможного разночтения термина карта высот (Вы и сами отметили в #2) я опирался на поясняющий текст:
Цитата:
из имеющегося bmp файла построить рядышком в другом image градиентное распределение высот из цветов, из которых состоит сам bmp
Как прочитал это я: градиентное - значит с переходом от одного цвета к другому (в общем случае предположил , что градиент всех цветов - от темных до светлых) что будет отображено в этой гистограмме.
Распределение высот - карта соотношений определённых величин (цветов/оттенков) ко всему набору данных.
Из цветов, из которых состоит сам бмп - т.е. данные о которых указано выше это действительно цвета/оттенки, и как раз требуется их количественный учет - "распределение цветов"

Соотнеся некоторую странность изложения с общим стилем (новичковским - малоинформативность, неполнота) предположил, что задача учебная, и посему вряд ли с уклоном в серьёзные исследования - решил соответственно сперва подать более подходящий (по имхо) вариант - для учебной задачи он может быть полезен почти в любом случае - даже если человеку нужны серьезные вещи - начинать надо с малого (а коли бы он был не начинающий - то привёл бы сразу пройденные им этапы).

Ну и в довершение - мне всё телепатор подсказал

Chester751 Вы сперва панельку сделайте, рисунок туда нарисуйте, добавьте возможность проводить линии, а пока всё это делаете изучайте OpenGL -код и вообще весь код, что в программе той и постепенно всё раскусите. Что не будет получаться - с результатами работ скиньте в тему - сообразим толпой ))

Последний раз редактировалось phomm; 17.03.2013 в 18:35.
phomm вне форума Ответить с цитированием
Старый 17.03.2013, 18:43   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Как прочитал это я: градиентное - значит с переходом от одного цвета к другому
Ну да, а я решил что интересует поле градиента, построенного по карте высот.
Но карта высот - одномерная функция координаты, а цвет BMP - трехмерная. Поэтому у меня и возник вопрос, как по имеющемуся полноцветному файлу построить карту высот, чтобы уже от нее брать градиент.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать Карту Tamee Паскаль, Turbo Pascal, PascalABC.NET 5 06.06.2012 20:10
как сделать изображение-карту? незнайка_на_земле HTML и CSS 6 18.11.2011 21:34
Нужно сделать интерактивную карту 3dgoroda.ru Помощь студентам 0 21.02.2011 13:10
Как сделать BMP (768х756х24bit) из Avi-файла (768х756х24bit) без Формы? nick17 Общие вопросы Delphi 0 14.12.2010 15:29