Frage

Im Moment verwende ich GetPixel (), um etwa 64 Pixel vom Desktop abzurufen, um ihre Farbe zu erhalten. Ich habe über GetPixel gelesen () langsam, aber ich dachte nicht, dass es für ein paar Pixel von Bedeutung wäre, aber es dauert 1,5 Sekunden jedes Mal, wenn ich die Routine betreibe. Nachdem ich einige Nachforschungen angestellt habe, bin ich zu dem Schluss gekommen, dass Bitblt das zu sein scheint, wonach ich suche. Ich möchte einen definierten Bereich des Desktops (einschließlich aller Fenster) und dann Pixelfarben bei gegebenen Offsets schnappen. Hier ist, was ich jetzt mache:

     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;

}

Ich habe eine anständige Menge an Tutorial und Dokumentation gefunden, aber so neu in der Windows -API, die sie für mich nicht viel tun. Vielen Dank!

War es hilfreich?

Lösung

Sie wollen wahrscheinlich:

  • CreateCompatibledc
  • CreateCompatibleBitMap
  • SelectObject, speichern Sie die ursprüngliche Bitmap
  • Bitblt
  • Getibits
  • SelectObject und die ursprüngliche Bitmap zurücklegen
  • DeletBitmap
  • Deletedc

Wenn Sie dies regelmäßig tun, sollten Sie die ersten drei Schritte nur einmal ausführen, wiederholen Sie BitBlt und GetDIBits, und die letzten drei, wenn Ihr Programm endet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top