Jump to content

How to load an image to RAM


 Share

Recommended Posts

My problem is:

I use ImageSearch.dll to search an image on desktop

and this is ImageSearch.au3

#include-once
; ------------------------------------------------------------------------------
;
; AutoIt Version: 3.0
; Language:    English
; Description:  Functions that assist with Image Search
;                Require that the ImageSearchDLL.dll be loadable
;
; ------------------------------------------------------------------------------
;===============================================================================
;
; Description:    Find the position of an image on the desktop
; Syntax:          _ImageSearchArea, _ImageSearch
; Parameter(s): 
;                  $findImage - the image to locate on the desktop
;                  $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                               image differ from desktop. e.g GIF
;                  $resultPosition - Set where the returned x,y location of the image is.
;                                    1 for centre of image, 0 for top left of image
;                  $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                  On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
;      a desktop region to search
;
;===============================================================================
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
   return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc
Func _ImageSearchMouseArea($findImage,$resultPosition,$radius,ByRef $x, ByRef $y, $tolerance)
    Return _ImageSearchArea($findImage,$resultPosition,MouseGetPos(0)-$radius,MouseGetPos(1)-$radius,MouseGetPos(0)+$radius,MouseGetPos(1)+$radius,$x,$y,$tolerance)
EndFunc

Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)
; If error exit
    if $result[0]="0" then return 0

; Otherwise get the x,y location of the match and the size of the image to
; compute the centre of search
$array = StringSplit($result[0],"|")
  
   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc
;===============================================================================
;
; Description:    Wait for a specified number of seconds for an image to appear
;   
; Syntax:          _WaitForImageSearch, _WaitForImagesSearch
; Parameter(s): 
;    $waitSecs  - seconds to try and find the image
;                  $findImage - the image to locate on the desktop
;                  $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                               image differ from desktop. e.g GIF
;                  $resultPosition - Set where the returned x,y location of the image is.
;                                    1 for centre of image, 0 for top left of image
;                  $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                  On Failure - Returns 0
;
;
;===============================================================================
Func _WaitForImageSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
$waitSecs = $waitSecs * 1
$startTime=TimerInit()
While TimerDiff($startTime) < $waitSecs
  sleep(100)
  $result=_ImageSearch($findImage,$resultPosition,$x, $y,$tolerance)
  if $result > 0 Then
   return 1
  EndIf
WEnd
return 0
EndFunc
;===============================================================================
;
; Description:    Wait for a specified number of seconds for any of a set of
;                  images to appear
;   
; Syntax:          _WaitForImagesSearch
; Parameter(s): 
;    $waitSecs  - seconds to try and find the image
;                  $findImage - the ARRAY of images to locate on the desktop
;                             - ARRAY[0] is set to the number of images to loop through
;        ARRAY[1] is the first image
;                  $tolerance - 0 for no tolerance (0-255). Needed when colors of
;                               image differ from desktop. e.g GIF
;                  $resultPosition - Set where the returned x,y location of the image is.
;                                    1 for centre of image, 0 for top left of image
;                  $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns the index of the successful find
;                  On Failure - Returns 0
;
;
;===============================================================================
Func _WaitForImagesSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
$waitSecs = $waitSecs * 1
$startTime=TimerInit()
While TimerDiff($startTime) < $waitSecs
  for $i = 1 to $findImage[0]
      sleep(100)
      $result=_ImageSearch($findImage[$i],$resultPosition,$x, $y,$tolerance)
      if $result > 0 Then
       return $i
      EndIf
  Next
WEnd
return 0
EndFunc

and this is my Program just like this

#include <ImageSearch.au3>
$x1 = 0
$y1 = 0
$ImageToSearch = @Scriptdir &"\Image.bmp"
HotKeySet("x","_exit")
Sleep(7000)
$i = 1
While $i < 100000
      $res1 = _ImageSearch ($ImageToSearch ,1,$x1,$y1,100)
   If ($res1 = 1) Then
   Exit
   Else
   Call("_ChangeDesktop")
   EndIf
WEnd
Func _exit()
Exit
EndFunc

Func _ChangeDesktop()
   ;Dosomething to change desktop
   $i = $i + 1
EndFunc

Absolutely my program will load the Image.bmp in HardDrive 100000 times

I want to load the image to some where on RAM to low down the time of reading from Hard Drive

Please help

Sorry about my bad English!

ImageSearchDLL.rar

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...