[R] Vitesse d'execution de mon comparateur d'image

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
profann
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 14 oct. 2008 11:00
Status : Hors ligne

[R] Vitesse d'execution de mon comparateur d'image

#1

Message par profann »

Bonjour a tous, j'aurai besoin d'un conseil sur un script que je viens de faire.

Le script fonctionne bien mais est beaucoup trop long a s'executer, j'aurai donc besoin de conseil pour l'optimiser si c'est possible.

Le script ouvre 2 images (1280 par 800 ) et fait une comparaison pixel par pixel. j'utilise pour ça la fonction GDIPlus_BitmapGetPixel trouvé sur votre forum et bien utile, bravo au concepteur. Actuelement le code mais au mois 5mn opour comparer 2 images sur ma machine.

Voici le code:

Code : Tout sélectionner

    _GDIPlus_Startup()
    $image1 = _GDIPlus_ImageLoadFromFile("test01.jpg")
    $image2 = _GDIPlus_ImageLoadFromFile("test02.jpg")
    
    for $coordx = 1 to 1280
        for $coordy = 1 to 800
            $color1 = GDIPlus_BitmapGetPixel($image1,$coordx,$coordy)
            $color2 = GDIPlus_BitmapGetPixel($image2,$coordx,$coordy)
;~          if $color1 <> $color2 then msgbox(4096,"","pixels differents : " & $coordx & "|" & $coordy ) 
        Next
;indicateur de vitesse
        TrayTip("","Indicateur : " & $coordx, 1)
    Next
    _GDIPlus_ImageDispose($image1)
    _GDIPlus_ImageDispose($image2)
    _GDIPlus_Shutdown()

Func GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)
    Local $tArgb, $pArgb, $aRet
    $tArgb = DllStructCreate("dword Argb")
    $pArgb = DllStructGetPtr($tArgb)
    $aRet = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "ptr", $pArgb)
    Return "0x" & Hex(DllStructGetData($tArgb, "Argb"))
EndFunc   ;==>GDIPlus_BitmapGetPixel

 
Merci.
Modifié en dernier par profann le mer. 22 oct. 2008 10:11, modifié 1 fois.
profann
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 14 oct. 2008 11:00
Status : Hors ligne

Re: [...] Vitesse d'execution de mon comparateur d'image

#2

Message par profann »

J'ai reussi a contourner le probleme en utilisant la commande MsDOS FC qui compare 2 fichiers. Le traitement est donc beaucoup plus rapide mais un autre probleme se dresse devant moi :
Sur 2 images en apparence identique, j'obtiens des differences que ce soit avec la commande FC ou avec le code au dessus.

Le but final du programme est de "tester" une appli en faisant une action automatique avec AutoIT, faire ensuite une capture d'ecran avec la fonction _ScreenCapture_CaptureWnd() que je compare a une image de reference prise elle aussi avec la fonction _screencapture_capturewnd().
Donc sur 2 images prise toutes les deux sur la meme fenetre avec la meme fonction, j'obtiens 2 images en apparence similaire mais differentes parfois meme avec 1Ko de différence.

Donc je vais devoir m'y prendre autrement pour automatiser mes tests.
Répondre