Hi All.
Пытаюсь получить различие изображений в процентах. Использую ImageMagickObject.dll, т.к она достаточно быстра и бесплатна.
Сравнение производится раз в секунду, но получить его результат в процентах я не могу - $oIM.Compare возвращает пустую строку.
При нажатии "Quit", в логе SciTE следующие строки:
+>00:19:55 AU3Check ended.rc:0
>Running:(3.3.8.0) :\Program Files\AutoIt3\autoit3.exe "D:\1\1.au3"
10.8064 (0.0423779)
10.8064 (0.0423779)
10.8064 (0.0423779)
+>00:19:58 AutoIT3.exe ended.rc:0
+>00:19:59 AutoIt3Wrapper Finished
>Exit code: 0 Time: 4.167
Центральные строчки с цифрами - 1 строка за каждую секунду исполнения скрипта - каким-то образом возвращается из ImageMagickObject и похожи именно на то, что мне и нужно.
Эти строки появляются в логе только при завершении работы скрипта, но не в процессе работы.
Я испробовал несколько вариантов с StderrRead, StdoutRead, ConsoleRead, DllCall, ObjEvent в попытках получить эти данные в процессе исполнения скрипта. Пробовал при запуске из SciTE и скомпилированного EXE. Безрезультатно. Возможно я неправильно их "готовил".
Код, dll и bmp, которые я использовал, в архиве около 2Мб - http://yadi.sk/d/X9M3Ln8XFMpfy
Буду благодарен всем, кто предложит решение, рабочий код или полезную ссылку.
Пытаюсь получить различие изображений в процентах. Использую ImageMagickObject.dll, т.к она достаточно быстра и бесплатна.
Код:
#include <WindowsConstants.au3>
$DllExist = 1
Global $oIM = ObjCreate ("ImageMagickObject.MagickImage.1")
If @error OR NOT IsObj ($oIM) Then
If NOT FileExists ("ImageMagickObject.dll") Then
MsgBox (16, "!", "No ImageMagickObject.dll - work impossible.")
Exit
EndIf
RunWait (@ComSpec & " /c regsvr32 /s ImageMagickObject.dll", @ScriptDir , @SW_HIDE)
$DllExist = 0
$oIM = ObjCreate ("ImageMagickObject.MagickImage.1")
If @error OR NOT IsObj ($oIM) Then
MsgBox (16, "!", "Error using ImageMagickObject.dll - work impossible.")
Exit
EndIf
EndIf
$Main = GUICreate ("GUI", 455, 290, 0, 0, $WS_DLGFRAME)
$Quit = GUICtrlCreateButton ("Quit", 345, 167.5, 100)
$Sec_old = -1
GUISetState (@SW_SHOW)
While 1
$msg = GUIGetMsg()
If $msg = $Quit Then
If $DllExist = 1 Then
RunWait (@ComSpec & " /c regsvr32 /u /s ImageMagickObject.dll", @ScriptDir , @SW_HIDE)
EndIf
Exit
EndIf
If $Sec_old <> @SEC Then
$Sec_old = @SEC
$oIM.Compare ("-metric", "MAE", "old.bmp", "new.bmp", "null:")
EndIf
WEnd
Сравнение производится раз в секунду, но получить его результат в процентах я не могу - $oIM.Compare возвращает пустую строку.
При нажатии "Quit", в логе SciTE следующие строки:
+>00:19:55 AU3Check ended.rc:0
>Running:(3.3.8.0) :\Program Files\AutoIt3\autoit3.exe "D:\1\1.au3"
10.8064 (0.0423779)
10.8064 (0.0423779)
10.8064 (0.0423779)
+>00:19:58 AutoIT3.exe ended.rc:0
+>00:19:59 AutoIt3Wrapper Finished
>Exit code: 0 Time: 4.167
Центральные строчки с цифрами - 1 строка за каждую секунду исполнения скрипта - каким-то образом возвращается из ImageMagickObject и похожи именно на то, что мне и нужно.
Эти строки появляются в логе только при завершении работы скрипта, но не в процессе работы.
Я испробовал несколько вариантов с StderrRead, StdoutRead, ConsoleRead, DllCall, ObjEvent в попытках получить эти данные в процессе исполнения скрипта. Пробовал при запуске из SciTE и скомпилированного EXE. Безрезультатно. Возможно я неправильно их "готовил".
Код, dll и bmp, которые я использовал, в архиве около 2Мб - http://yadi.sk/d/X9M3Ln8XFMpfy
Буду благодарен всем, кто предложит решение, рабочий код или полезную ссылку.