Pregunta

En este momento estoy usando GetPixel () para recuperar cerca de 64 píxeles desde el escritorio con el fin de obtener su color. He leído acerca de GetPixel () siendo lento, pero no pensé que tendría importancia para unos pocos píxeles, pero trata de tomar como 1,5 segundos cada vez que ejecute la rutina. Después de hacer algunas investigaciones que he llegado a la conclusión de que BitBlt parece que lo que estoy buscando. Lo que quiero hacer es agarrar un área definida del escritorio (incluyendo todas las ventanas) y luego agarrar colores de píxeles en desplazamientos dados. Esto es lo que estoy haciendo ahora:

     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;

}

He encontrado una buena cantidad de tutorial y la documentación, pero al ser tan nuevo en la API de Windows que no están haciendo mucho para mí. Gracias!

¿Fue útil?

Solución

Probablemente se esté queriendo:

  • CreateCompatibleDC
  • CreateCompatibleBitmap
  • SelectObject, ahorrando el mapa de bits original
  • BitBlt
  • GetDIBits
  • SelectObject, poniendo la parte posterior mapa de bits original
  • DeleteBitmap
  • DeleteDC

Si usted está haciendo esto periódicamente, entonces usted debe hacer los tres primeros pasos sólo una vez, BitBlt de repetición y GetDIBits, y los tres últimos cuando los acabados del programa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top