Для чего нужен HDC в GetDIBits?

Я использовал GetDIBits получить растровые данные из контекста устройства, совместимого с экраном, в DIB определенного формата. У меня сложилось впечатление, что DC необходим только для синтеза таблицы цветов, когда исходная битовая карта составляет 8 бит на пиксель или меньше. Поскольку моим исходным растровым изображением было полное 32-битное цветное изображение, и это была одноразовая программа, и у меня не было удобного экрана, я установил для параметра HDC значение NULL. Это не сработало. Как только я взял экран DC и передал его, он начал работать.

Это заставило меня задуматься, почему GetDIBits требует контекст устройства. Для чего его используют?

1 ответ

Решение

В:

int SetDIBits(
  __in  HDC hdc,
  __in  HBITMAP hbmp,
  __in  UINT uStartScan,
  __in  UINT cScanLines,
  __in  const VOID *lpvBits,
  __in  const BITMAPINFO *lpbmi,
  __in  UINT fuColorUse
);

Второй аргумент hbmp это зависящее от устройства растровое изображение, которое будет изменено с использованием информации о цвете из независимого от устройства растрового изображения. hdc является дескриптором контекста устройства, от которого зависит это (зависящее от устройства) растровое изображение. Когда вызов сделан, Windows использует информацию из этого контекста устройства, чтобы решить, как выполнить преобразование.

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