Для чего нужен 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 использует информацию из этого контекста устройства, чтобы решить, как выполнить преобразование.