![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
Нужно как можно быстрее вывести bitmap на canvas DrawGrid'а. Стандартный BitBlt не даёт нужной скорости. Как это сделать?
Поможет ли использование библиотек (DelphiX, FastLib, DIBUltra, Graphics32...)? |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Не поможет. Как рисовал и как измерял скорость рисования? |
|||
|
||||
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
А что, у них слишком маленький прирост скорости? Поможет ли использование встроенной в Delphi библиотеки OpenGL? В памяти нарисован bitmap (около 1000х1000 точек), с которого в OnDrawCell копируется небольшая область (16х16 точек) в каждую ячейку с помощью BitBlt. Скорость никак не измерял. Проблема в том, что при скроллинге таблицы мерцает крайний столбец или строка в той стороне, куда направлен скроллинг. Двойная буферизация помогает, но появляются тормоза, и теперь при скроллинге вместо мерцания в крайних ячейках видно как поверх старых bitmap'ов заметно медленно рисуются новые. |
|||
|
||||
Dimonka2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Дело не в скорости методов, а в подходе. Если ты хочешь пользоваться DrawGrid-ом, то никакие библиотеки тебе ничего не ускорят.
Мерцание означает, что срабатяет ещё одна перерисовка. Т.е. до того как ты рисуешь. DrawGrid рисует там тоже. Можно попробовать написать наследника грида и изменить его поведение. Быстрее чем обычный BitBlt всё равно никакая библиотека в гриде не нарисует. |
||||
|
|||||
CrazyDaver |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 16.2.2011 Репутация: нет Всего: нет |
Это как раз и странно. DrawGrid, когда я начинал писать программу, при скроллинге или перекрытии формы другим окном сам не запускал событие перерисовки ячейки. Пришлось добавить свою перерисовку в событие формы OnPaint. Теперь же, я полностью удалил всё из OnPaint, и всё равно DrawGrid перерисовывается. Я полностью проверил код программы - ничто не может его перерисовывать. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Смотри события грида Wm_Paint, Wm_EraseBackground итд. Наверняка там куча всего интересного происходит. Рекомендую наследоваться от чего-нибудь типа TCustomDrawGrid и сделать свою правильную реализацию. Почитай о том как создавать компоненты, как регистрировать компоненты итд. Всё прекрасно будет рисоваться без всяких directx или opengl |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |