Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2009, 08:42   #1
Shaienn
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию Посоветуйте, как лучше сделать бегущий график

Добрый день.

Есть потребность в совете.
Делаю логический анализатор и пишу к нему программу для отображения.

Анализированные значения рисую в виртуальном битмапе и вывожу через BitBlt на канву формы.
Возник вопрос, что делать, когда график выходит за пределы области отображения? Логично было бы сдвигать весь график влево, чтобы в области отображения появлялось свободное место.

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

Мысль первая:

Допустим у меня область отображения 700 на 300 точек. Я создаю такой битмап, заполняю его в соответствии с пришедшими данными. После этого я создаю новый битмап 1400 на 300 и копирую первый битмап в начало второго и так далее...

Правильно ли? Или такие вещи делаются иначе?
Shaienn вне форума Ответить с цитированием
Старый 20.10.2009, 10:27   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Я бы сначала сделал в лоб: хранил не готовые изображения графика, а контрольные значения и по ним "на лету" строил изображение на экране. Если уже скорость прорисовки будет слишком медленной, то уже можно "прилепить" кэширование изображения графика. Только лучше, наверно будет, не картинку увеличивать постоянно, а создавать их несколько штук. Создать несколько изображений высотой в 300 пикселей. Ширину можно выбрать какую угодно. И для вывода на экран из этих изображений собираем мозаику и получаем из кусочков график. Когда изображения кончаются, то очищаем самое левое из них (которое уже на экране не видно), помещаем его на первое место и уже на нём рисуем новую порцию данных. Весь график в виде картинки хранить пожалуй не стоит. Сколько будет занимать памяти картинка 10000000х300 и как быстро она будет обрабатываться? В виде изображений целесообразно хранить пожалуй только видимую часть графика + еще немного за границы для более быстрой перемотки. Ну а данные все хранить в виде координат (х,у) или может только у, если х изменяется по прогрессии.
ЗЫ. Это если график может быть достаточно длинным. Если же он будет занимать от силы 2-3 экрана, то проще и быстрее сразу под весь график битмап выделить и рисовать себе на здоровье.
pu4koff вне форума Ответить с цитированием
Старый 20.10.2009, 17:59   #3
Shaienn
 
Регистрация: 06.05.2009
Сообщений: 5
По умолчанию

Наверное Вы правы с общим массивом данных.
Начал думать в том направлении и набрел на странную вещь:

Это родилось из мыслей о том, как скопировать маленький массив данных из ком-порта в конец большого общего.
Здесь я банально создаю и заполняю два массива, а потом записываю второй массив в первый с адреса сотого номера.

Код:
int mas1[200];
int mas2[100];
int *p=mas1;
int *p2=mas2;
for (int i = 0; i < 100; i++) {
	 mas1[i]=1;
	 mas2[i]=2+i;
}
	memcpy(p+100,p2,400);
Из описания:
Цитата:
char memcpy (dest, src, cnt);
char *dest; указатель на результат
char *src; указатель на исходный буфер
unsigned cnt; количество символов
Но почему массив копируется полностью только при количестве символов 400? При установке 100 - копируется лишь 25 символов массива Причем я заглянул в массив, все копируется правильно, но что за цифра - 400?

Последний раз редактировалось Shaienn; 20.10.2009 в 18:05.
Shaienn вне форума Ответить с цитированием
Старый 20.10.2009, 18:31   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Там копируются байты, а не int'ы. Размер int = 4 байтам. Правильнее будет не 400, а sizeof(int)*100, где 100 - число элементов.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посоветуйте как правильно построить график 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