Janex72 Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 Привет всем. Надо мне создать свои Scope - незнаю как по русски он называется Как пример брал TTMSFMXScope - етот типо TChart но сами линии по таимеру передвигаются с право на лево. Готовых компонентов для етого мало (TMS, TeeChart, больше ненашёл), компонент от TMS слишком медlеленныи, мне нужен тупои квадрат в котором двигались отрисованые линии с скоростю как минимум 10 кадров в секунду и отрисовка занимало самое минимальное возможное время, а то на форме ето будет не единственное что будет отрисовыватся... Ну кароч, решил ето делать на TPaintbox-е рисуя линии с DrawLine. Но возникает вопрос - будет ли ето самыи быстрии способ ето сделать, мож есть какие то другие методы? Мож рисовать сперва на TBitmap-е и потом его кидать на канвy? Есть идеи что использовать чтоб достич максимальную возможную скорость отрисовки ? WBR Janex Цитата Ссылка на комментарий
0 POV Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 А вопрос-то в чём? Возьми нарисуй что хочешь в событии OnPaint любого контрола. Минут за 10 напишешь. Оцени как быстро рисуется. Цитата Ссылка на комментарий
0 Janex72 Опубликовано 6 декабря, 2017 Автор Поделиться Опубликовано 6 декабря, 2017 17 минут назад, POV сказал: А вопрос-то в чём? Возьми нарисуй что хочешь в событии OnPaint любого контрола. Минут за 10 напишешь. Оцени как быстро рисуется. Так сделал уже, рисуется, вроде даже быстро... Но мне нужно построить график, как уже писал, которыи будет менятся/перерисовыватся 10 или чаше раз в секунду, и из етого вопрос - рисовать на канве линии с DrawLine будет самыи быстрыи метод или ето каким то другим способом лучше делать ? Цитата Ссылка на комментарий
0 POV Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 Ну вот и отрисуй график. Данные любые, хоть синус. И замерь частоту перерисовки. А насчет TChart - зря ты, что он медленный. Если добавляешь более 1 точки, делай BegineUpdate и затем EndUpdate. Так же отключи ненужности (контура, подложку, прозрачности и заливки и т.п.) Цитата Ссылка на комментарий
0 GASCHE Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 23 минуты назад, Janex72 сказал: Но мне нужно построить график, как уже писал, которыи будет менятся/перерисовыватся 10 или чаше раз в секунду Не совсем понятно, надо при каждом изменении дорисовывать в конец графика по одной точке, или каждый раз "менять/перерисовывать" весь график? Цитата Ссылка на комментарий
0 Janex72 Опубликовано 6 декабря, 2017 Автор Поделиться Опубликовано 6 декабря, 2017 (изменено) 5 минут назад, GASCHE сказал: Не совсем понятно, надо при каждом изменении дорисовывать в конец графика по одной точке, или каждый раз "менять/перерисовывать" весь график? Приходится каждыи раз перерисовывать весь график. При приходе новых данных, весь графих сдвигается в лево и в конце (с право) рисуется новая точка. Все точки соедены с Line... Изменено 6 декабря, 2017 пользователем Janex72 Цитата Ссылка на комментарий
0 GASCHE Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 (изменено) Я рисовал требуемое количество точек на TBitmap потом все копировал на экран, вырезал с TBitmap со второй точки очищал и копировал туда же все начиная с первой точки TBitmap в конец TBitmap дорисовывал следующую точку графика и так далее. Изменено 6 декабря, 2017 пользователем GASCHE Цитата Ссылка на комментарий
0 POV Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 Ну так тем более перед передачей всех новых точек пиши BeginUpdate, по окончании - EndUpdate. Кратно вырастет скорость. Цитата Ссылка на комментарий
0 Janex72 Опубликовано 6 декабря, 2017 Автор Поделиться Опубликовано 6 декабря, 2017 Будем пробовать ... Но вопрос то другои - рисовать на канве с DrawLine самыи быстрии способ ? Подозреваю, что, если, на пример, захочу мультик показывать на канве (сотни всяких draw) с 25fps то врятли канва ето потянет ... Может бить для супер скорости вообше другои подход нужен ? Цитата Ссылка на комментарий
0 POV Опубликовано 6 декабря, 2017 Поделиться Опубликовано 6 декабря, 2017 ХЗ чего тебе не так. У меня чарт выдал 64 fps 1.rar Цитата Ссылка на комментарий
0 Janex72 Опубликовано 6 декабря, 2017 Автор Поделиться Опубликовано 6 декабря, 2017 46 минут назад, POV сказал: ХЗ чего тебе не так. У меня чарт выдал 64 fps 1.rar Хммм, да, вроде пашет ... я через dataset дёргал его, наверно изза етого ... Цитата Ссылка на комментарий
0 dnekrasov Опубликовано 9 декабря, 2017 Поделиться Опубликовано 9 декабря, 2017 Я в данном случае использую TPathData и Canvas.DrawPath. График из 1024 точек 10 раз в секунду перерисовывается без проблем var i: Integer; Path: TPathData; begin Path := TPathData.Create; try Path.MoveTo(PointList[0]); for i := 1 to PointList.Count - 1 do Path.LineTo(PointList[i]); end; Canvas.DrawPath(Path, 1); finally FreeAndNil(Path) end; Brovin Yaroslav и Евгений Корепов 2 Цитата Ссылка на комментарий
Вопрос
Janex72
Привет всем.
Надо мне создать свои Scope - незнаю как по русски он называется
Как пример брал TTMSFMXScope - етот типо TChart но сами линии по таимеру передвигаются с право на лево.
Готовых компонентов для етого мало (TMS, TeeChart, больше ненашёл), компонент от TMS слишком медlеленныи,
мне нужен тупои квадрат в котором двигались отрисованые линии с скоростю как минимум 10 кадров в секунду и
отрисовка занимало самое минимальное возможное время, а то на форме ето будет не единственное что будет отрисовыватся...
Ну кароч, решил ето делать на TPaintbox-е рисуя линии с DrawLine.
Но возникает вопрос - будет ли ето самыи быстрии способ ето сделать, мож есть какие то другие методы?
Мож рисовать сперва на TBitmap-е и потом его кидать на канвy?
Есть идеи что использовать чтоб достич максимальную возможную скорость отрисовки ?
WBR
Janex
Ссылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.