Question

En ce moment je suis en utilisant GetPixel () pour récupérer environ 64 pixels à partir du bureau afin d'obtenir leur couleur. Je l'ai lu GetPixel () être lent, mais ne pense pas qu'il serait question de quelques pixels, mais il prend comme 1,5 secondes à chaque fois que je lance la routine. Après avoir fait quelques recherches, j'ai conclu que BitBlt semble que ce que je cherche. Ce que je veux faire est de récupérer une zone définie du bureau (y compris toutes les fenêtres), puis les couleurs de pixels d'appui à des décalages donnés. Voici ce que je fais maintenant:

     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;

}

J'ai trouvé une bonne quantité de tutoriel et la documentation, mais être si nouvelle à l'API Windows, ils ne font pas grand-chose pour moi. Merci!

Était-ce utile?

La solution

Vous vouloir probablement:

  • CreateCompatibleDC
  • CreateCompatibleBitmap
  • SelectObject, sauver le bitmap d'origine
  • BitBlt
  • GetDIBits
  • SelectObject, mettre le dos bitmap d'origine
  • DeleteBitmap
  • DeleteDC

Si vous faites cela régulièrement, alors vous devriez faire les trois premières étapes qu'une seule fois, répétez BitBlt et GetDIBits, et les trois derniers lorsque la fin de votre programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top