Domanda

In questo momento sto usando GetPixel () per recuperare circa 64 pixel dal desktop al fine di ottenere il loro colore. Ho letto di GetPixel () essere lento, ma non pensavo che sarebbe un problema per un paio di pixel, ma sta prendendo come 1,5 secondi ogni volta ho eseguito la routine. Dopo aver fatto qualche ricerca ho concluso che bitblt sembra quello che sto cercando. Quello che voglio fare è prendere un'area definita del desktop (tra cui tutte le finestre) e poi i colori afferrare pixel in dati offset. Ecco quello che sto facendo ora:

     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;

}

Ho trovato una discreta quantità di tutorial e documentazione, ma essendo così nuovo per l'API di Windows che non stanno facendo molto per me. Grazie!

È stato utile?

Soluzione

Probabilmente stai voglia:

  • CreateCompatibleDC
  • CreateCompatibleBitmap
  • SelectObject, salvare il bitmap originale
  • BitBlt
  • GetDIBits
  • SelectObject, mettendo la parte posteriore bitmap originale
  • DeleteBitmap
  • DeleteDC

Se stai facendo questo periodicamente, allora si dovrebbe fare i primi tre passi solo una volta, ripetere BitBlt e GetDIBits, e gli ultimi tre quando il programma finiture.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top