totoita

Imagesearch srtange issue

13 posts in this topic

#1 ·  Posted (edited)

Hi,

I am building a script with success then i have got this problem:

this works:
 

$result = _ImageSearch ( 'btnrecycle.bmp', 0, $posx1_green, $posy1_green, 0)

it returns 1 in $result

this works (1 line above):
 

$result2 = _ImageSearch('green_crate.bmp', 0, $posx1_btn_recycle, $posy1_btn_recycle, 0)

it return 1 in $result2
but this did not works either:
 

$result = _ImageSearch ( 'btnrecycle.bmp', 0, $posx1_green, $posy1_green, 0)
$result2 = _ImageSearch('green_crate.bmp', 0, $posx1_btn_recycle, $posy1_btn_recycle, 0)

without changing anything (except to uncomment the line of course).
Inserting a msgbox bewteen line 1 and 2 and another msgbox after the second line, give me 2 differents value for $result.

1st msgbox gives 1 and the 2nd msgbox gives nothing !
Why the second research change the value return by the first one, they are 2 different variable ?

Those variable are not declared.
I try different solution, adding a declaration as local or global for both variable but it does not change anything.

I probably miss something but what ?

windows 7 64bit or windows xp (same iussue)
autoit 3.5.4
ImageSearchDLL.dll 92k (2008 in details)

Edited by Melba23
Added additional details from second post - most of which just repeated the first

Share this post


Link to post
Share on other sites



2 hours ago, totoita said:

1st msgbox gives 1 and the 2nd msgbox gives nothing !
Why the second research change the value return by the first one, they are 2 different variable ?

I can't see the lines with your MsgBoxes, so may be there is a typo?

Share this post


Link to post
Share on other sites

i did not put them in the post...but just imagine 1 msgbox insert between the line 1 and 2..so it becames 3 lines..and another after the new line 3.

$result = _ImageSearch ( 'btnrecycle.bmp', 0, $posx1_green, $posy1_green, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0) ; give me 1
$result2 = _ImageSearch('green_crate.bmp', 0, $posx1_btn_recycle, $posy1_btn_recycle, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0) ; give me nothing..empty..


 

Share this post


Link to post
Share on other sites

That's not possible as no new data was assigned to $result. There must be at least 1 scriptline which assign a blank to $result. May be a AdlibRegistered func. Please post the whole script. 

Share this post


Link to post
Share on other sites

Could it be that the area where the msgbox appeared isn't fully re-painted before the second _ImageSearch()?
Try adding a sleep(1000) after the first msgbox() to test.

Jos 


Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_UseX64=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ImageSearch.au3>
#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>

;search in selection left (472,561) bottom right (850, 968)
MsgBox(0,"MSG","placer l image juste derrière")
Sleep ( 400 )
Local $cratediscovered = 0
Local $fortesting_list_of_arti_lvl_found
Local $iTimeout = 10

Local $posx1_green=0 ;
Local $posy1_green=0 ;

Local $posx1_btn_recycle = 0 ; 
Local $posy1_btn_recycle = 0 

Local $ipixelColor = 0

Local $x_pixelcolor = 0
Local $y_pixelcolor = 0
Local $x_pixelcolor1 = 0
Local $y_pixelcolor1 = 0
Local $x_pixelcolor2 = 0
Local $y_pixelcolor2 = 0
Local $x_pixelcolor3 = 0
Local $y_pixelcolor3 = 0
Local $x_pixelcolor4 = 0
Local $y_pixelcolor4 = 0

Local $x_pixelcolor_hundred = 0
Local $y_pixelcolor_hundred = 0


Local $iColor = 9999
Local $iColor1 = 1
Local $iColor2 = 1
Local $iColor3 = 1
Local $iColor4 = 1

Local $iColor20 = 1
Local $iColor30 = 1

Local  $arr[300][4]

Local $i_forarray = 0
Local $y_forarray = 0

$oDictionary = ObjCreate("Scripting.Dictionary")

$oDictionary.ADD("1000", "1")
$oDictionary.ADD("1100", "2")
$oDictionary.ADD("0100", "3")
$oDictionary.ADD("0011", "4")
$oDictionary.ADD("0101", "5")
$oDictionary.ADD("0111", "6")
$oDictionary.ADD("0000", "7")
$oDictionary.ADD("0110", "8")
$oDictionary.ADD("0001", "9")

;
; find recycle bin and move to the center of it
; change 2nd argument to 0 to return the top left coord instead

;$result = _ImageSearch ( 'green_crate.bmp', 0, $posx1_green, $posy1_green, 0)
$result = _ImageSearch ( 'btnrecycle.bmp', 0, $posx1_green, $posy1_green, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0)
$result2 = _ImageSearch('green_crate.bmp', 0, $posx1_btn_recycle, $posy1_btn_recycle, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0)

;MsgBox(0x0, 'result green crate:', $result2, 0)
;while ( $result = 1 and $cratediscovered < 9)
if ($result = 1) Then
     MouseMove($posx1_green, $posy1_green,3)
     ;MouseMove($posx1_green, $posy1_green,3)
    ;MsgBox(0,"red crate found","green crate found..")
    ;MsgBox($MB_SYSTEMMODAL, "Title", "poistion x et y, x: " & $posx1_green & " y: " &$posy1_green & " seconds or select the OK button.")

    MouseClick($MOUSE_CLICK_LEFT, $posx1_green, $posy1_green)
    Sleep ( 50 )


    $x_pixelcolor20 = $posx1_green + 42
    $y_pixelcolor20 = $posy1_green + 47 ;le bas du dernier l de level

    $x_pixelcolor30 = $posx1_green + 42
    $y_pixelcolor30 = $posy1_green + 39 ; le haut du dernier l de level

    $x_pixelcolor1 = $posx1_green + 42 + 7
    $y_pixelcolor1 = $posy1_green + 47

    $x_pixelcolor2 = $posx1_green + 42 + 7
    $y_pixelcolor2 = $posy1_green + 47 - 1

    $x_pixelcolor3 = $posx1_green + 42 + 7
    $y_pixelcolor3 = $posy1_green + 47 - 2

    $x_pixelcolor4 = $posx1_green + 42 + 7
    $y_pixelcolor4 = $posy1_green + 47 - 4

    $x_pixelcolor_hundred = $posx1_green + 42 + 32
    $y_pixelcolor_hundred = $posy1_green + 42 - 3


    ;Local $iColor20 = PixelGetColor($x_pixelcolor20, $y_pixelcolor20)
    ;Local $iColor30 = PixelGetColor($x_pixelcolor30, $y_pixelcolor30)
    ;MsgBox($MB_SYSTEMMODAL, "", "le l de level -- " & ",icolor20=" & $iColor20 & ",icolor30=" & $iColor30)


     $iColor1 = PixelGetColor($x_pixelcolor1, $y_pixelcolor1)
     $iColor2 = PixelGetColor($x_pixelcolor2, $y_pixelcolor2)
     $iColor3 = PixelGetColor($x_pixelcolor3, $y_pixelcolor3)
     $iColor4 = PixelGetColor($x_pixelcolor4, $y_pixelcolor4)

     $iColor_hundred = PixelGetColor($x_pixelcolor_hundred, $y_pixelcolor_hundred) ; check if it is 1,1x or 1xx
    ;MsgBox($MB_SYSTEMMODAL, "", "icolor= " & $iColor & ",icolor1=" & $iColor1 & ",icolor2=" & $iColor2 & ",icolor3=" & $iColor3 & ",icolor4=" & $iColor4)

    if ($iColor1 <> 0) then $iColor1 = 1 ; 1 is for "not black"
    if ($iColor2 <> 0) then $iColor2 = 1
    if ($iColor3 <> 0) then $iColor3 = 1
    if ($iColor4 <> 0) then $iColor4 = 1
    if ($iColor_hundred <> 0) then $iColor_hundred = 1 ; so it is a 1xx artifact if <> 0 ..bracket detected..

    ;MsgBox($MB_SYSTEMMODAL, "", "icolor= " & $iColor & ",icolor1=" & $iColor1 & ",icolor2=" & $iColor2 & ",icolor3=" & $iColor3 & ",icolor4=" & $iColor4)
    ;MsgBox($MB_SYSTEMMODAL, "", "The decimal color is: " & $iColor & "---1:" & $iColor1 & "---2:" & $iColor2 & "---3:" & $iColor3 & "---4:" & $iColor4)

    ;$iColor1 = PixelGetColor($x_pixelcolor1, $y_pixelcolor1)
    ;$iColor2 = PixelGetColor($x_pixelcolor2, $y_pixelcolor2)
    ;$iColor3 = PixelGetColor($x_pixelcolor3, $y_pixelcolor3)
    ;$iColor4 = PixelGetColor($x_pixelcolor4, $y_pixelcolor4)
   $iColor = $iColor1 & $iColor2 & $iColor3 & $iColor4


   If Not ($oDictionary.Exists($iColor)) Then
     ;MsgBox(0x0, 'Item Two', $oDictionary.Item('Two'), 2)
    ; MsgBox(0x0, 'Chiffres trouvés:', $oDictionary.Item($iColor), 2)
     ;MouseClick($MOUSE_CLICK_LEFT, $posx1_green, $posy1_green)
    ;
     MsgBox($MB_SYSTEMMODAL, "Title", "Chiffres non trouvés, program will exit", 0)
     Exit
   Else
     $fortesting_list_of_arti_lvl_found = $fortesting_list_of_arti_lvl_found & " - " & $oDictionary.Item($iColor) ; for testing only
   EndIf
   If ($iColor < 5 and   $iColor_hundred <> 1) then
     MouseClick($MOUSE_CLICK_LEFT, $posx1_btn_recycle, $posy1_btn_recycle)
     MouseClick($MOUSE_CLICK_LEFT, $posx1_green, $posy1_green)

     ;$posx1_btn_recycle
   EndIf
   ;MsgBox($MB_SYSTEMMODAL, "", "The decimal color is: " & $iColor & "-1:" & $iColor1 & "-2:" & $iColor2 & "-3:" & $iColor3 & "-4:" & $iColor4)
    ;MsgBox($MB_SYSTEMMODAL, "", "icolor= " & $iColor & ",icolor1=" & $iColor1 & ",icolor2=" & $iColor2 & ",icolor3=" & $iColor3 & ",icolor4=" & $iColor4)
    ;MsgBox(0x0, 'Chiffre trouvé:', $iColor)
    ;$iColor1 = 1
    ;$iColor2 = 1
    ;$iColor3 = 1
    ;$iColor4 = 1
    $result = _ImageSearch('green_crate.bmp', 0, $posx1_green, $posy1_green, 0)
    $cratediscovered =  $cratediscovered + 1

;WEnd
;$fortesting_list_of_arti_lvl_found
MsgBox(0x0, 'Artif trouvées:', $fortesting_list_of_arti_lvl_found, 0)

EndIf

it s a working code..many things are in comments.

Share this post


Link to post
Share on other sites

a working in progress code i meant

Share this post


Link to post
Share on other sites

yes i did, even before u proposed it to me..result is the same
I just reamde the code with the minimum and it does not change anything..very strange.

Share this post


Link to post
Share on other sites

I just tried to rename resuslt in resultt , thinking it was ,may be, a reserved name and it seems to works..i will confirm tomorrow

So many hours for nothing..hope i m right
thanks for help

Share this post


Link to post
Share on other sites
11 hours ago, totoita said:

$result is already used in

#include <ImageSearch.au3>

that was the problem.
thanks for help.

 

Share this post


Link to post
Share on other sites
;$result = _ImageSearch ( 'green_crate.bmp', 0, $posx1_green, $posy1_green, 0)
$result = _ImageSearch ( 'btnrecycle.bmp', 0, $posx1_green, $posy1_green, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0)
$result2 = _ImageSearch('green_crate.bmp', 0, $posx1_btn_recycle, $posy1_btn_recycle, 0)
MsgBox(0x0, 'result recycle btl:', $result, 0)

Is that a typo? Or is the 2nd msgbox supposed to show the same variable $result?

Share this post


Link to post
Share on other sites

It was no typo, it was to demostrate the issue:

On ‎20‎.‎02‎.‎2016 at 11:11 AM, totoita said:

Inserting a msgbox bewteen line 1 and 2 and another msgbox after the second line, give me 2 differents value for $result.

1st msgbox gives 1 and the 2nd msgbox gives nothing !
Why the second research change the value return by the first one, they are 2 different variable ?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now