GetPixel
es lento por dos razones:
Ya que estás de votación la pantalla - cada llamada a GetPixel
conduce a una transacción con el controlador de vídeo, que a su vez lleva el píxel datos de la memoria de video.
En constraste usando GetPixel
en DIB es mucho más rápido.
De todos modos GetPixel
realiza varias tareas, incluyendo las coordenadas de recortes/transformaciones y etc.
Así que si usted está utilizando para consultar muchos valores de pixel a la vez - usted debe tratar de arreglar esto en un solo transacción a GDI/controlador de video.
Al usar GDI, debe crear una DIB del tamaño adecuado (consulte CreateDIBSection
). Después de la creación, se le dará un puntero directo a los datos de bits de la imagen. Luego copie la parte de la imagen en su DIB (vea BitBlt
). Tampoco olvide llamar al GdiFlush
antes de comprobar realmente el contenido del DIB (ya que los controladores de video pueden hacer un dibujo asíncrono).
Usando GD +, puede hacer lo mismo, con una sintaxis un poco más simple.
¿Qué tipo de uso necesitas? Puede valer la pena tomar una región en la pantalla y luego muestrear píxeles de esa. – hometoast
Mi aplicación permite al usuario tomar muestras de color desde cualquier lugar de la pantalla (fuera de mi aplicación) en tiempo real. +1 Buena idea sobre restringir a una región: voy a ver si puedo hacer eso. – stucampbell