Bonjour,
J'ai besoin de vos lumières pour optimiser la vitesse d'exécution d'un programme.
- But du programme :
Mon programme est un OCR, il scanne certains pixels de l'écran par exemple les pixels en (100;100), (103;98) et (105;101) avec ça je suis capable de savoir si il s'agit d'un caractère 1 à 9 qui est inscrit dans cette partie d'écran. Ces caractères ne faisant pas partis de mon programme lui-même mais d'un programme écrit en java tournant dans une page html.
Le but c'est de récupérer les données d'un autre logiciel. Et ça marche. Sauf que...
Il est très lent sur mon nouveau PC (résolution native 3200x1080) alors qu'avec mon ancien PC tous était immédiat (1600x900)... En réduisant la résolution ça ne résout même pas mon problème!
J'ai déterminé que c'était la fonction GetPixel() qui était très lente en Ultra Haute Définition. Si je la met en remarques // tout le reste redevient fluide...
Bon avant d'utilise GetPixel() il faut appeler une fonction telle que GetDC(NULL) qui fournit un handle sur un Device Context, un Device context contient entre autre un bloc de bits avec les couleurs de chaque pixels, et ça c'est énorme en 3200x1080.
Ce bloc de bits est forcément réactualisé lors de l'appel de GetPixel, d'où sa lenteur évidente.
Le soucis c'est que mon Device Context est appliqué sur la totalité de l'écran donc 3200x1080 alors que je sais exactement où pointer sur les bons caractères. Un Device Context sur un bloc de pixels de 100x200 me suffirait amplement, sauf que je ne sais pas comment isolé seulement cette zone plutôt que l'écran en entier.
Il y a bien un moyen d'accéder à une zone restreinte mais il faut connaitre le handle de la fenêtre cible, et ça je ne peux pas. C'est un programme java affiché par une page html.
Le mieux serait de délimiter une zone sans aucun rapport avec une fenêtre en particulier, mais je sèche.
Avez vous de conseils ou suggestions ?
Merci
Partager