Что нового

ImageMagickObject - compare - как получить различие изображений в процентах?

Pumbaa

Новичок
Сообщения
2
Репутация
0
Hi All.

Пытаюсь получить различие изображений в процентах. Использую 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

Буду благодарен всем, кто предложит решение, рабочий код или полезную ссылку.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
В чём проблема?
Код:
$oIM = ObjCreate ("ImageMagickObject.MagickImage.1")
If Not IsObj($oIM) Then
	Exit
EndIf
$oIM.Compare ("-metric", "MAE", "old.bmp", "new.bmp", "null:")

Результат.
Код:
10.8064 (0.0423779)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Pumbaa,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 
Автор
P

Pumbaa

Новичок
Сообщения
2
Репутация
0
Garrett: Проблема в том, что строку с цифрами я могу получить только в лог SciTE и только в момент завершения скрипта. Пока "крутится" цикл они остаются где-то внутри и мне недоступны. Приведённый код это просто короткий пример - в основной программе подразумеваются дальнейшие манипуляции с результатами сравнения.

madmasles: Спасибо, учту.
 
Верх