xterro писал(а):Нарисовал на canvas-е сетку, и рисую, также реализовал масштабирование . На данный момент рисую только линию. Проблема в том, что как-то оно субъективно, медленно отрисовывается, особенно когда минимальный коэффициент масштабирования и двигаешь полосы прокрутки. Можно ли как-нибудь увеличить производительность?
Если рисовать линию по точкам, то не удивительно, что тормозит.
Во-первых надо рисовать сетку более оптимально, об этом ниже.
Во-вторых перерисовываться при прокрутке содержимое контрола, который внутри скроллбокса, не должно. Лучше пусть он запоминает во внутреннем буфере и выводит из него при прокрутке. Не сложно для этого написать свой контрол, но думаю что такой уже есть.
Если размер изображения очень большой, то буферизация не катит, но можно рисовать только то, что видно в данный момент.
Сетку, конечно, рисуют линиями. Канвас должен поддерживать пунктирные линии.
Но, в принципе её можно рисовать как угодно и запоминать в буфере. Потом этот буфер просто и быстро копировать куда нужно. Сетка ведь редко меняется.
P.S. Наткнулся тут ещё на такую штуку: BGRABitmap, как думаете, можно ей заменить стандартный canvas, у неё вроде и сглаживание есть и наверняка двойная буферизация.
Под двойной буферизацией обычно понимается то, что рисуем сперва в буфер, а потом этот буфер сразу показываем. Это позволяет избавиться от дерганий и мельканий, но не от тормозов. Тормозов может даже добавить.
Другое дело, что если есть буферизация отрисовки, то можно использовать этот буфер чтобы не перерисовывать все при прокрутке.
Не спец по контролам LCL, но BGRABitmap часто рекомендуют для быстрой отрисовки. Возможно он буферизирует и правильно реагирует на прокрутку.