CreateCompatibleBitmap против SelectObject

Мне интересно, если я хочу создавать разные растровые изображения,

Я использую CreateCompatibleBitmap снова и снова, чтобы связать его с той же памятью CDC.

это то же самое значение, что я CreateBitmap а также SelectObject опять и опять??

Я задаю этот вопрос, потому что я хочу сделать что-то с недавно созданным растровым изображением другим CDC.

2 ответа

Решение

Не видя конкретного кода, трудно понять точную проблему, но CreateCompatibleBitmap обычно используется в ситуациях двойной буферизации, чтобы избежать мерцания. Вместо того, чтобы рисовать непосредственно в контексте устройства (DC), вы сначала рисуете за пределами экрана или в памяти DC, которая в основном рисует в растровое изображение. Затем растровое изображение копируется непосредственно на экран DC с помощью BitBlt, поэтому создается впечатление, что все рисование происходит одновременно.

Обычные шаги таковы (и, вероятно, будут происходить на каждом WM_PAINT):

  1. Используйте экран DC для создания растрового изображения, которое "совместимо" с ним, используя CreateCompatibleBitmap,
  2. Создать память DC
  3. Выберите растровое изображение в памяти DC (это то, что вы будете рисовать)
  4. Когда рисунок закончен BitBlt битмап памяти DC на экран DC.

Более подробная информация доступна здесь: Руководство по Win32 Memory DC (Code Project)

Да, CreateCompatibleBitmap() создает новое растровое изображение, новое распределение памяти, новый обработчик каждый раз, когда вы вызываете его в цикле;

Другие вопросы по тегам