• 0
Janex72

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

Вопросы

Привет всем.

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

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

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

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

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

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

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

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

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

WBR
Janex

 

 

 

 

 

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


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

11 ответов на этот вопрос

  • 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;

 

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


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

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