| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > масштабирование |
| Автор: boolean34 16.5.2012, 13:08 |
| привет всем! делаю прогу и не могу определиться со способом реализации. в общем на форме будет слоями выводиться(рисоваться) различные данные(слой первичных данных, слой результатов обработки , служебная инфа и тд) . плюс нужна картографическая поддержка по типу гугл/яндекс мэпс с прокруткой и зумированием/масштабированием. как лучше будет по скорости и качеству: 1) нарисовать все в bitmap в самом высоком разрешении, и в зависимости от коэффициента масштаба все это дело сжимать спец(сглаживания?) алгоритмами; 2) координаты хранить в массиве и каждый раз рисовать в зависимости от коэффициента масштаба ; 3) ваш вариант. ??? |
| Автор: Amp 16.5.2012, 15:41 |
| Зависит от того насколько масштабировать собираешься. Если битмап в максимальном масштабе укладывается в некоторые разумные размеры, не знаю, например до 4000x4000, то можно заранее все нарисовать. В общем случае - рисовать нужный регион каждый раз с учетом масштаба. Если отрисовка "тяжелая", то можно еще кэшировать что-нибудь для более гладкой прокрутки. |
| Автор: drug007 16.5.2012, 16:47 | ||||
Нечто подобное в планах
Все зависит от тяжести картинки. Сейчас я использую второй вариант - массив вершин, который выводится на экран с помощью OpenGL, масштабирование решается элементарно средствами самого OpenGL. Но у меня пока плотность информации очень маленькая - только линии и точки выводятся на экран (типа реки, береговой черты и населенных пунктов). В дальнейшем планирую выводить заполненные многоугольники (например суша и море). Тут уже думаю использовать текстуры и масштабирование решать через LODы. Но это все равно ближе ко второму варианту. В целом первый вариант проще в реализации, но потом сложнее будет масштабировать (тут я имею в виду сам алгоритм). На маленьких объемах он будет быстрее, на больших медленнее второго. Второй вариант более универсален и масштабируем, но сложнее в реализации. |
| Автор: boolean34 17.5.2012, 05:15 |
| понял. кто подскажет алгоритмы сглаживания для 1-го варианта? |
| Автор: Amp 17.5.2012, 10:46 |
| Билинейная фильтрация, например. В билдере не пишу, но думаю, что там должны быть классы для трансформации картинок. Можешь вывести как текстуру с помощью того же OpenGL - он сам отфильтрует. Правда дополнительно придется сгенерировать несколько mip-map уровней, что отразится на потреблении памяти. |
| Автор: boolean34 17.5.2012, 11:16 |
| ок, всем спасибо большое! |
| Автор: Doga 14.6.2012, 00:10 |
| Привет. Вообще, у класса TImage достаточно неплохие алгоритмы масштабирования. Но если Вам надо что то выдающееся - посмотрите в сторону библиотеки ImageEn. Вот уж, где слаживание, так сглаживание! |