Использование BitBlt для захвата пиксельных цветов настольного компьютера

StackOverflow https://stackoverflow.com/questions/4555279

  •  13-10-2019
  •  | 
  •  

Вопрос

Прямо сейчас я использую getPixel (), чтобы получить около 64 пикселей с рабочего стола, чтобы получить их цвет. Я читал о том, что getPixel () медленно, но не думал, что это будет иметь значение для нескольких пикселей, но каждый раз, когда я запускаю рутину. После некоторого исследования я пришел к выводу, что BitBlt кажется тем, что я ищу. Что я хочу сделать, так это взять определенную область рабочего стола (включая все окна), а затем взять цвета пикселей при данных смещениях. Вот что я делаю сейчас:

     for (y=0;y<=7;y++) {
     for (x=0;x<=7;x++) {
     //gameScreen is a struct containing the offset from the top left of the monitor
     //to the area of the screen I need
         grid[y][x]=getColor(gameScreen.x+((x*40)+20),gameScreen.y+((y*40)+20));
         }
     }

int getColor(int x, int y) {
//create new point at given coordinates
POINT point;
point.x=x;
point.y=y;
//convert to logical points
DPtoLP(desktopDC,&point,2);
//get pixel color
//desktopDC is an HDC from GetWindowDC(GetDesktopWindow())
int pixel=GetPixel(desktopDC,point.x,point.y);
return pixel;

}

Я нашел приличное количество учебных пособий и документации, но, будучи настолько новичком в API Windows, которые они не делают для меня. Спасибо!

Это было полезно?

Решение

Вы, наверное, хотите:

  • CreateCompatibledc
  • Create -StoveribleBitmap
  • SelectObject, Сохранение исходной растровой карты
  • Bitblt
  • GetDibits
  • SelectObject, вернуть исходную растровую карту обратно
  • Deletebitmap
  • Удален

Если вы делаете это периодически, вы должны делать первые три шага только один раз, повторите BitBlt а также GetDIBits, и последние три, когда ваша программа заканчивается.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top