| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Звук, графика и видео > Ускорение вывода графики |
| Автор: CrazyDaver 2.5.2011, 05:59 |
| Нужно как можно быстрее вывести bitmap на canvas DrawGrid'а. Стандартный BitBlt не даёт нужной скорости. Как это сделать? Поможет ли использование библиотек (DelphiX, FastLib, DIBUltra, Graphics32...)? |
| Автор: Dimonka2 2.5.2011, 17:13 | ||
Не поможет. Как рисовал и как измерял скорость рисования? |
| Автор: CrazyDaver 3.5.2011, 07:39 |
А что, у них слишком маленький прирост скорости? Поможет ли использование встроенной в Delphi библиотеки OpenGL? В памяти нарисован bitmap (около 1000х1000 точек), с которого в OnDrawCell копируется небольшая область (16х16 точек) в каждую ячейку с помощью BitBlt. Скорость никак не измерял. Проблема в том, что при скроллинге таблицы мерцает крайний столбец или строка в той стороне, куда направлен скроллинг. Двойная буферизация помогает, но появляются тормоза, и теперь при скроллинге вместо мерцания в крайних ячейках видно как поверх старых bitmap'ов заметно медленно рисуются новые. |
| Автор: Dimonka2 3.5.2011, 10:55 | ||||
Дело не в скорости методов, а в подходе. Если ты хочешь пользоваться DrawGrid-ом, то никакие библиотеки тебе ничего не ускорят.
Мерцание означает, что срабатяет ещё одна перерисовка. Т.е. до того как ты рисуешь. DrawGrid рисует там тоже. Можно попробовать написать наследника грида и изменить его поведение. Быстрее чем обычный BitBlt всё равно никакая библиотека в гриде не нарисует. |
| Автор: Dimonka2 4.5.2011, 13:55 | ||
Смотри события грида Wm_Paint, Wm_EraseBackground итд. Наверняка там куча всего интересного происходит. Рекомендую наследоваться от чего-нибудь типа TCustomDrawGrid и сделать свою правильную реализацию. Почитай о том как создавать компоненты, как регистрировать компоненты итд. Всё прекрасно будет рисоваться без всяких directx или opengl |