|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.10.2009, 08:42 | #1 |
Регистрация: 06.05.2009
Сообщений: 5
|
Посоветуйте, как лучше сделать бегущий график
Добрый день.
Есть потребность в совете. Делаю логический анализатор и пишу к нему программу для отображения. Анализированные значения рисую в виртуальном битмапе и вывожу через BitBlt на канву формы. Возник вопрос, что делать, когда график выходит за пределы области отображения? Логично было бы сдвигать весь график влево, чтобы в области отображения появлялось свободное место. Так как длительность анализа может быть различной, то хотелось бы иметь возможность, используя скролл, вернуться в начало анализа и пройти по всей временной оси. Мысль первая: Допустим у меня область отображения 700 на 300 точек. Я создаю такой битмап, заполняю его в соответствии с пришедшими данными. После этого я создаю новый битмап 1400 на 300 и копирую первый битмап в начало второго и так далее... Правильно ли? Или такие вещи делаются иначе? |
20.10.2009, 10:27 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Я бы сначала сделал в лоб: хранил не готовые изображения графика, а контрольные значения и по ним "на лету" строил изображение на экране. Если уже скорость прорисовки будет слишком медленной, то уже можно "прилепить" кэширование изображения графика. Только лучше, наверно будет, не картинку увеличивать постоянно, а создавать их несколько штук. Создать несколько изображений высотой в 300 пикселей. Ширину можно выбрать какую угодно. И для вывода на экран из этих изображений собираем мозаику и получаем из кусочков график. Когда изображения кончаются, то очищаем самое левое из них (которое уже на экране не видно), помещаем его на первое место и уже на нём рисуем новую порцию данных. Весь график в виде картинки хранить пожалуй не стоит. Сколько будет занимать памяти картинка 10000000х300 и как быстро она будет обрабатываться? В виде изображений целесообразно хранить пожалуй только видимую часть графика + еще немного за границы для более быстрой перемотки. Ну а данные все хранить в виде координат (х,у) или может только у, если х изменяется по прогрессии.
ЗЫ. Это если график может быть достаточно длинным. Если же он будет занимать от силы 2-3 экрана, то проще и быстрее сразу под весь график битмап выделить и рисовать себе на здоровье. |
20.10.2009, 17:59 | #3 | |
Регистрация: 06.05.2009
Сообщений: 5
|
Наверное Вы правы с общим массивом данных.
Начал думать в том направлении и набрел на странную вещь: Это родилось из мыслей о том, как скопировать маленький массив данных из ком-порта в конец большого общего. Здесь я банально создаю и заполняю два массива, а потом записываю второй массив в первый с адреса сотого номера. Код:
Цитата:
Последний раз редактировалось Shaienn; 20.10.2009 в 18:05. |
|
20.10.2009, 18:31 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Там копируются байты, а не int'ы. Размер int = 4 байтам. Правильнее будет не 400, а sizeof(int)*100, где 100 - число элементов.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
посоветуйте как правильно построить график | vakyla | Общие вопросы Delphi | 11 | 31.03.2009 08:12 |
Посоветуйте какой лучше купить монитор 19" | Zummer | Компьютерное железо | 4 | 25.05.2008 21:16 |
Посоветуйте какие програмы лучше скачать для програмирования | Spellsinger | Свободное общение | 3 | 17.12.2007 20:33 |
Подскажите как лучше сделать | Gendolff | БД в Delphi | 1 | 10.02.2007 08:47 |