Что нового

[Ошибки] Зависание скрипта при обработке изображений с помощью GDIP

unsend

Новичок
Сообщения
27
Репутация
2
Принцип действия скрипта:
В бодике сверяется цвет точки и если точка изменила цвет скрипт стартует функцию.
Потом производится вырезка 2х картинок - в одной из них QR код, в другой документ - QR сохраняется и декодируется, а потом в зависимости от того что в QR либо создается директория, либо сохраняется вторая картинка в фаил по пути вытащенном из QR - вроде ничего сложного, но почемуто скрипт проработав 1-3 минуты зависает, в трее пропадает меню пауза/клозе и дальше ток через диспетчер задач снимается. После перезапуска все норм, а потом виснет. Вопрос собственно в чем трабл или как его можно выциганить - я уже моск сломал - помогите плиз если не трудно. Сами ми не местные - проще говоря лет уже фиг знает скок ничего не писал - подтупливаю:smile:
Критика написания приветствуется:smile:

Код:
#Include <Constants.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <Encoding.au3>

Global Const $Path = '.\ZBar\bin\zbarimg.exe'
Global Const $QR = './QRDecode.png'

Global $Str = '', $Err = ''

$Color = 0x000000 ; Цвет-эталон
If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
While 1
If PixelGetColor ( 10, 10) <> $Color Then    
;   MsgBox(64, 'File', StringTrimRight(PixelGetColor ( 8, 70), 3))
   _Main() 
   EndIf
   Sleep(900)
   WEnd

Func _Main()
	Local $hBitmap, $hClone, $hImage, $iX, $iY, $hMatrix

	; Initialize GDI+ library
	_GDIPlus_Startup()
	; Capture 32 bit bitmap
	$hBitmap = _ScreenCapture_Capture("")
	$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hClone = _GDIPlus_BitmapCloneArea($hImage, 5, 5, 200, 200, $GDIP_PXF24RGB)
    $hDoc =  _GDIPlus_BitmapCloneArea($hImage, 337, 0, 1472, 1040, $GDIP_PXF24RGB)
	; Save bitmap to file
	_GDIPlus_ImageSaveToFile($hClone, "./QRDecode.png")
If Not FileExists($Path) Then
   MsgBox(16, 'Error', 'zbarimg.exe not found.')
   Exit
EndIf
$str = ''
$PID = Run($Path & ' "' & $QR & '"', '', @SW_HIDE, BitOR($STDOUT_CHILD, $STDERR_CHILD))

While 1
    $Str &= StdoutRead($PID)
    If @error Then ExitLoop
WEnd

While 1
    $Err &= StderrRead($PID)
    If @error Then
        ExitLoop
    EndIf
WEnd

$dir = StringReplace ( $Str, 'QR-Code:','')
   If StringMid($dir, 1, 1) = 'D' then 
   $dir = StringReplace ( $dir, 'D   C:\Temp','C:\Tmp')
   DirCreate(StringTrimRight($dir, 3))

EndIf
   If StringMid($dir, 1, 1) = 'A' then 
   $file = StringReplace ( $dir, 'A   C:\Temp','C:\Tmp')
     $hMatrix = _GDIPlus_MatrixCreate()  
   	_GDIPlus_MatrixRotate($hMatrix, 90, "False")
	_GDIPlus_GraphicsSetTransform($hDoc, $hMatrix)
	_GDIPlus_ImageSaveToFile($hDoc, StringTrimRight($file, 3))
    _GDIPlus_MatrixDispose($hMatrix)

   MsgBox(64, 'File', StringTrimRight($file, 3))
   EndIf

	; Clean up resources
	_GDIPlus_ImageDispose($hClone)
	_GDIPlus_ImageDispose($hImage)
	_WinAPI_DeleteObject($hBitmap)

	; Shut down GDI+ library
	_GDIPlus_Shutdown()

EndFunc   ;==>_Main
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: [Ошибки] Скрипт виснет - помогите причину найти плиз.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Ошибки] Скрипт виснет - помогите причину найти плиз." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Администратор.
 
Автор
U

unsend

Новичок
Сообщения
27
Репутация
2
А как ее назвать то можно?) Спасибо конечно за совет;) Честно говоря в том и проблема что в чем состоит ошибка не знаю:smile: Потому и написал что скрипт зависает - помогите найти ошибку:smile:
Если бы проблема была с конкретной функцией так и написал бы:smile: Если подскажите как обозвать правильнее - естественно переобзову:smile: Честно говоря просто как по другому написать не знаю:smile:
Так лучше?;)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Ошибки] Скрипт виснет - подозрение на _GDI

unsend
я тебе предложил название для темы. только учти на будущее, у нас принято сводить жаргоны и всякий другой "падонкафский" шлак к минимуму, в идеале к нулю. если ты хочешь дальше комфортно проводить время на нашем форуме, прими это к сведению и прими соответствующие меры.
 
Автор
U

unsend

Новичок
Сообщения
27
Репутация
2
Мдя... Вобщем было выявлено что скрипт при выполнении в очередной раз Sleep(900) вываливается из очереди на обработку и получает статус усопшего - проще говоря он вообще не обрабатывается после этого - просто висит в памяти и ждет очереди с минимальным приоритетом и пока к нему не обратишся на прямую подняв ручками приоритет больше не просыпается... Разрабам мона былобы дать совет в таком случае хатяб дебаг вставить для таких случаев более углубленный чтобы взаимосвязь отследить из самого процесса можно было хотяб в машинном коде чтоли... Так что всем спасибо за потраченное время на обсуждение этой темы...
 
Верх