Перейти к содержанию
  • 0
Janex72

Скорость рисования на канве

Вопросы

Привет всем.

Надо мне создать свои Scope - незнаю как по русски он называется :(

Как пример брал TTMSFMXScope - етот типо TChart но сами линии по таимеру передвигаются с право на лево.

Готовых компонентов для етого мало (TMS, TeeChart, больше ненашёл), компонент от TMS слишком медlеленныи,

мне нужен тупои квадрат в котором двигались отрисованые линии с скоростю как минимум 10 кадров в секунду и

отрисовка занимало самое минимальное возможное время, а то на форме ето будет не единственное что будет отрисовыватся...

Ну кароч, решил ето делать на TPaintbox-е рисуя линии с DrawLine.

Но возникает вопрос - будет ли ето самыи быстрии способ ето сделать, мож есть какие то другие методы?

Мож рисовать сперва на TBitmap-е и потом его кидать на канвy?

Есть идеи что использовать чтоб достич максимальную возможную скорость отрисовки ?

WBR
Janex

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

А вопрос-то в чём? Возьми нарисуй что хочешь в событии OnPaint любого контрола. Минут за 10 напишешь. Оцени как быстро рисуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
17 минут назад, POV сказал:

А вопрос-то в чём? Возьми нарисуй что хочешь в событии OnPaint любого контрола. Минут за 10 напишешь. Оцени как быстро рисуется.

Так сделал уже, рисуется, вроде даже быстро...

Но мне нужно построить график, как уже писал, которыи будет менятся/перерисовыватся 10 или чаше раз в секунду, и

из етого вопрос - рисовать на канве линии с DrawLine будет самыи быстрыи метод или ето каким то другим

способом лучше делать ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну вот и отрисуй график. Данные любые, хоть синус. И замерь частоту перерисовки.

А насчет TChart - зря ты, что он медленный. Если добавляешь более 1 точки, делай BegineUpdate и затем EndUpdate. Так же отключи ненужности (контура, подложку, прозрачности и заливки и т.п.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
23 минуты назад, Janex72 сказал:

Но мне нужно построить график, как уже писал, которыи будет менятся/перерисовыватся 10 или чаше раз в секунду

Не совсем понятно, надо при каждом изменении дорисовывать в конец графика по одной точке, или каждый раз "менять/перерисовывать" весь график? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
5 минут назад, GASCHE сказал:

Не совсем понятно, надо при каждом изменении дорисовывать в конец графика по одной точке, или каждый раз "менять/перерисовывать" весь график? 

Приходится каждыи раз перерисовывать весь график. При приходе новых данных, весь графих сдвигается в лево и в конце (с право) рисуется

новая точка. Все точки соедены с Line...

Отредактировал Janex72

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я рисовал требуемое количество точек на TBitmap потом все копировал на экран, вырезал с TBitmap со второй точки очищал и копировал туда же все начиная с первой точки TBitmap в конец TBitmap дорисовывал следующую точку графика и так далее.

Отредактировал GASCHE

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну так тем более перед передачей всех новых точек пиши BeginUpdate, по окончании - EndUpdate. Кратно вырастет скорость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Будем пробовать ...

Но вопрос то другои - рисовать на канве с DrawLine самыи быстрии способ ?

Подозреваю, что, если, на пример, захочу мультик показывать на канве (сотни всяких draw) с 25fps то врятли канва ето потянет ...

Может бить для супер скорости вообше другои подход нужен ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
46 минут назад, POV сказал:

ХЗ чего тебе не так. У меня чарт выдал 64 fps

1.rar

Хммм, да, вроде пашет ... я через dataset дёргал его, наверно изза етого ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Я в данном случае использую 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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...