Как добавить Canvas в пользовательский класс? - PullRequest
1 голос
/ 17 апреля 2020

Класс Graphics32 TBitmap32 имеет холст, поэтому все, что можно рисовать на Canvas, может рисовать на TBitmap32. Я хочу создать свой собственный класс растровых изображений, не производный от TBitmap или TBitmap32, а также иметь Canvas. Я мог бы просто подделать его, используя TBitmap с его Canvas, а затем просто скопировать пиксели в мой класс. Но это довольно медленно.

1 Ответ

1 голос
/ 18 апреля 2020

С Graphics32 доступно несколько графических «бэкэндов». У каждого свои преимущества и недостатки. Тем не менее, в основном это связано с производительностью и потреблением памяти.

По умолчанию (для TBitmap32) используется TGDIBackend, что довольно универсально. Тем не менее, он наследует все недостатки от GDI. В частности, количество элементов GDI ограничено, поэтому вы не можете иметь бесконечно малое количество экземпляров.

Лучшим выбором был бы TMemoryBackend, но это само по себе не может быть нарисовано («слитно») на экране (т.е. любой D C). Компромиссом является TGDIMemoryBackend, который является TMemoryBackend с возможностью рисовать на экране. Тем не менее, он не поддерживает шрифты, если я правильно помню, но в соответствии с вашими требованиями это, вероятно, не нужно.

...