CreateCompatibleBitmap против SelectObject
Мне интересно, если я хочу создавать разные растровые изображения,
Я использую CreateCompatibleBitmap
снова и снова, чтобы связать его с той же памятью CDC.
это то же самое значение, что я CreateBitmap
а также SelectObject
опять и опять??
Я задаю этот вопрос, потому что я хочу сделать что-то с недавно созданным растровым изображением другим CDC.
2 ответа
Не видя конкретного кода, трудно понять точную проблему, но CreateCompatibleBitmap обычно используется в ситуациях двойной буферизации, чтобы избежать мерцания. Вместо того, чтобы рисовать непосредственно в контексте устройства (DC), вы сначала рисуете за пределами экрана или в памяти DC, которая в основном рисует в растровое изображение. Затем растровое изображение копируется непосредственно на экран DC с помощью BitBlt, поэтому создается впечатление, что все рисование происходит одновременно.
Обычные шаги таковы (и, вероятно, будут происходить на каждом WM_PAINT):
- Используйте экран DC для создания растрового изображения, которое "совместимо" с ним, используя
CreateCompatibleBitmap
, - Создать память DC
- Выберите растровое изображение в памяти DC (это то, что вы будете рисовать)
- Когда рисунок закончен
BitBlt
битмап памяти DC на экран DC.
Более подробная информация доступна здесь: Руководство по Win32 Memory DC (Code Project)
Да, CreateCompatibleBitmap() создает новое растровое изображение, новое распределение памяти, новый обработчик каждый раз, когда вы вызываете его в цикле;