GetPixel
est lent pour deux raisons:
Puisque vous êtes polling l'écran - chaque appel à GetPixel
conduit à une transaction au pilote vidéo, qui à son tour prend le pixel les données de la mémoire vidéo.
En revanche en utilisant GetPixel
sur DIB est beaucoup plus rapide.
Quoi qu'il en soit GetPixel
fait plusieurs choses, y compris les coordonnées clipping/transformations et etc.
Alors que si vous utilisez pour interroger de nombreuses valeurs de pixels à la fois - vous devriez essayer d'arranger cela en une seule transaction vers GDI/pilote vidéo. En utilisant GDI, vous devez créer une taille DIB de taille adéquate (voir CreateDIBSection
). Après la création, vous recevrez un pointeur direct sur les données des bits d'image. Copiez ensuite la partie de l'image sur votre DIB (voir BitBlt
). N'oubliez pas d'appeler le GdiFlush
avant de vérifier le contenu de la DIB (car les pilotes vidéo peuvent effectuer un dessin asynchrone). En utilisant GD +, vous pouvez faire la même chose avec une syntaxe un peu plus simple.
De quel type d'usage avez-vous besoin? Cela peut valoir la peine de saisir une région à l'écran et d'en échantillonner des pixels. – hometoast
Mon application permet à l'utilisateur d'échantillonner la couleur de n'importe où sur l'écran (en dehors de mon application) en temps réel. +1 Bonne idée de la restriction à une région: je verrai si je peux le faire. – stucampbell