![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Hexel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 30.10.2007 Где: UA Репутация: нет Всего: нет |
еще раз повторюсь: я не умею рисовать на буферном битмапе, поэтому для наглядности метода просто взял 2 паинт бокса
ну хоть теперь я ясно выразил свою идею? ЗЫ: если не сложно, выклади свой замер производительности. а то мне сложно судить, у меня атлон х2 4200 (2.2ГГц) х ДДР2 800МГц и как вообще эта произодительность замеряется? gettickcount? Это сообщение отредактировал(а) Hexel - 24.10.2009, 00:09 |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Попробовал я порисовать на буферном битмепе, результат поразителен отсутствием какой-либо разницы от рисования сразу на PaintBox'е, при отключении отрисовки, ни синусы, ни создание и удаление большого битмепа не смогли занять одно ядро E-4500 (2.2 HHz) на время большее времени выделяемому процессу.
2 Hexel: Сырец контрола можешь посмотреть. D 2007 Эксперементировал я с твоим примером, получилось вот что. Присоединённый файл ( Кол-во скачиваний: 6 )
AvgChart.rar 9,06 Kb-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Второй аттач. Да, в контроле там много чего inline помечено, без них по идее должно скомпилиться в семерке, а может и нет.
Присоединённый файл ( Кол-во скачиваний: 6 )
GraphicsTest1.rar 11,64 Kb-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Hexel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 30.10.2007 Где: UA Репутация: нет Всего: нет |
да, щас скачаю, погляжу. кстати, нашел, как рисовать в буферном битмапе, но разницы не заметил)))
вот ято я хотел сказать после некоторых размышлений. для технической задачи: 1) лучше применить векторную графику. лучше выглядит, проще обрабатывается (например, масштабируется, анализируется), и, главное, легче всего подготавливается в печать. 2) не знаю, что у тебя за график, но иногда его выгодно апроксимировать какой-то функцией, нас так в универе учили. если надо - помогу, у меня с математикой проблем нет. такая фича позволяет устранить посторонние шумы, например несистемные ошибки измерений (график выглядит более гладким). такой график, кстати, можно рисовать кривой Безье, буквально за несколько вызовов. по второму с выводом не спеши, посоветуйся со спецами Добавлено через 10 минут и 16 секунд Delphi6 нискампилил инлайны поубивал (я, кстати, и не знаю, что это), но обламался на
([Error] AvgChart.pas(180): Undeclared identifier: 'TFormatSettings') меня вот мучит вопрос: а что такого прикольного в новых IDE, помимо компонент, которые можно скачать с инета? до сих пор моей 6 мне хватало с головой, еще и оставалось |
|||
|
||||
| Hexel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 30.10.2007 Где: UA Репутация: нет Всего: нет |
насчет моего метода - да, разница в скорости есть. 500 тиков (мс?) для рисования толщиной 5, и 46 тиков для рисвания той же толщиной (или толщиной 50) с помощью CopyRect. в буфер, потом на паинтбокс
Добавлено через 3 минуты и 6 секунд при том, как оказалось, ВСЕ это время уходит на LineTo )))) |
|||
|
||||
| Beltar |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Так, я-таки решил сделать отрисовку диаграммы на буферном битмепе.
В интересующих случаях (из MouseMove, MouseUp и Click контрола) FastRepaint вызывается напрямую, в отличие от пред. версии ничего не лагает, но зато неприлично мерцает. Все, что после Canvas.Draw(0,0,Bmp); никакого влияния на мерцание не оказывает. Как побороть? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||
|
|||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
вместо Canvas.Draw() юзать сразу BitBlt().
что такое вот это?
вся идея в том, чтобы вообще все рисовать на буфере. Если рисование подложки графика ресурсовемко и нечастое, можно использовать два буфера, на первом рисовать подложку, на второй его копировать и наносить маркеры. Если мало - три буфера В итоге вывод на форму будет краток - один вызов BitBlt() |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Обошелся двумя буферами, итоговый код FastRepaint:
В кишках всех этих DrawSomething просто перед каждый канвасом приписал Bmp1. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
ты создаешь каждый раз битмап, но не удаляешь его.
а буферные битмапы и есть буферизация |
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
if Assigned(Bmp1) then Bmp1.Free; Если бы тут текло, то у меня, наверное, оперативки хватило бы на несколько минут максимум т. к. терять при каждом движении мышки с зажатой кнопкой экземпляр битмепа размером в пару метров должно быть приличным экстримом. Х) Хотя при разрушении компонента действительно забыл. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
Я не посмотрел, думал он локально используется. Тогда и смысла нет его каждый раз пересоздавать, создай при создании формы один раз, да и усе
|
|||
|
||||
| Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Там лажа с неочисткой битмепа получалась, поэтому не мудрствуя лукаво сделал так.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
| Mikel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
Для начала попробуй все рисовать в отдельном bitmap буфере, потом bitblt на paintbox. И кстати, зачем рисовать несколько десятков тысяч точек на дисплее с разрешением по Х порядка тысячи точек? Если график на столько подробный, можно рисовать прямо в памяти битмапа, без обращения к APIшному SetPixel. А вообще подумайте стоит ли их все рисовать
-------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |