|
2 / 2 / 0
Регистрация: 11.07.2011
Сообщений: 4
|
|
TCanvas LineTo отрисовка графика13.07.2011, 15:55. Показов 2794. Ответов 6
Метки нет (Все метки)
Доброго всем времени суток! Не могу добиться быстрой отрисовки ( перерисовки) графика при
его зумировании, выполняемое в событии MouseMove при нажатой клавише Ctrl. (с++ builder 6) Исходные данные - вектор структур в памяти (размер до 100к), считаю сколько экспериментальных точек приходится на 1 пиксель, вычисляю мин и макс, делаю для каждого пикселя отрисовку : LineTo(pix, min); LineTo(pix, max); Подскажите пожалуста, может есть способ ускорить отрисовку или у меня ошибка где в алгоритме ?
0
|
|
| 13.07.2011, 15:55 | |
|
Ответы с готовыми решениями:
6
Отрисовка греческих букв на TCanvas
Некорректная отрисовка графика на канве |
|
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
|
|
| 13.07.2011, 16:29 | |
|
Выполняете ли вы пересчет значений при каждой перерисовке?
Сколько примерно точек получается?
1
|
|
|
2 / 2 / 0
Регистрация: 11.07.2011
Сообщений: 4
|
||||||
| 13.07.2011, 16:46 [ТС] | ||||||
|
Да, при каждой перерисовке я вычисляю новые индексы вектора, от и до которых нужно вывести на экран, потом считаю сколько элементов вектора приходится на 1 пиксель (stepsPerPix), ищу
для таких "отрезков" Мин и Макс и провожу линию, потом для следующего пикселя и т.д. Если зумировать с минимального масштаба, то stepsPerPix= 50-90 вот код функции:
0
|
||||||
|
251 / 145 / 21
Регистрация: 14.06.2010
Сообщений: 340
|
|
| 13.07.2011, 17:11 | |
|
Ian, вроде бы в коде все нормально.
Только зачем выполнять зумирование при каждом движение мыши? Это событие вызывается же довольно часто. Может, вам нужно при прокрутке зумировать? Тогда событие MouseWheel. И еще. Для ускорение создайте дополнительный TBitmap размером с Image, при рисовании рисуйте сначала на канве битмапа, а потом копируйте все в канву имейджа. Через Canvas->CopyRect. Иначе при рисовании прямо на визуальном компоненте могут лишний раз вызываться дополнительные методы, что замедляет дело.
1
|
|
|
2 / 2 / 0
Регистрация: 11.07.2011
Сообщений: 4
|
||||||
| 13.07.2011, 19:36 [ТС] | ||||||
|
Спасибо большое, по движению мыши оно вроде как сподручнее, но если не устроит после битмапа скорость - буду делать прокруткой.
Добавлено через 2 часа 21 минуту Все просто летает ! Надо было сразу потрудиться и поискать подробнее про TBitmap, а то искусился простотой TImage-а и потерял время ломая голову. Мораль... Вот новая функция, может кому понадобится:
1
|
||||||
|
|
|
| 13.07.2011, 21:29 | |
|
Оно как бы да, но более "стандартным" все же принято считать масштабирование по MouseWheel , как советовал уважаемый Питекантроп, да и дополнительную кнопку клавиатуры задействовать при этом нужды нет.
1
|
|
|
2 / 2 / 0
Регистрация: 11.07.2011
Сообщений: 4
|
||||||
| 14.07.2011, 15:41 [ТС] | ||||||
|
Спасибо за советы, попробую учесть.
Добавлено через 14 часов 59 минут Прошу у всех прощения, но сегодня со свежей головы увидел недоделки в функции drawZoom(), и отрисовку лишней горизонтальной линии при масштабе "в лоб". Буду исправлять. Добавлено через 1 час 40 минут Проблема была в том, что прохлопал инициализацию x_win=0 перед циклом. И modf() тоже не нужно использовать. Повесил функцию на событие MouseWheel, действительно удобно, спасибо за совет =) Вот переделанная функция:
1
|
||||||
| 14.07.2011, 15:41 | |
|
Помогаю со студенческими работами здесь
7
Отрисовка графика в реальном времени
Отрисовка графика Отрисовка графика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|