Astel064
Помог мой пост, ставь +!
- Сообщения
- 276
- Репутация
- 51
AutoIt: 3.3.6.1+
Версия: 1.0 (11:04 19.10.2017)
Категория: Вспомогательные функции, Графика, Система, Окна и диалоги, Файловая система, Элементы GUI, Разное
Описание: Расширенные возможности при работе с веб-камерой. Библиотека работает со стандартной библиотекой "AviCap32.dll".
Поддерживаются следующие возможности:
• Создание "элемента" веб-камеры в Вашем окне;
• Создание и сохранения снимков;
• Запись видео в файл с веб-камеры (с возможностью записи аудио);
• Вызов диалогов настроек веб-камеры;
• Настройка записи видео;
• Подключение к конкретному драйверу веб-камеры, а также, вывод списко всех драйверов веб-камер;
• И др...
Код/Пример:
Файл: AviCap.zip
История версий:
Сисок функций:
Комментарий автора:
Источник: autoit-script.ru, msdn.microsoft.com
Автор: Astel064
Версия: 1.0 (11:04 19.10.2017)
Категория: Вспомогательные функции, Графика, Система, Окна и диалоги, Файловая система, Элементы GUI, Разное
Описание: Расширенные возможности при работе с веб-камерой. Библиотека работает со стандартной библиотекой "AviCap32.dll".
Поддерживаются следующие возможности:
• Создание "элемента" веб-камеры в Вашем окне;
• Создание и сохранения снимков;
• Запись видео в файл с веб-камеры (с возможностью записи аудио);
• Вызов диалогов настроек веб-камеры;
• Настройка записи видео;
• Подключение к конкретному драйверу веб-камеры, а также, вывод списко всех драйверов веб-камер;
• И др...
Код/Пример:
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "AviCap.au3"
Global $sAviFile=""
_AviCap_LoadDll()
If @Error Then Exit MsgBox(16, @Error, "Ошибка _AviCap_LoadDll")
$hWnd = GUICreate("AviCap Test", 641, 564)
GUISetBkColor(0xFFFFFF)
$hWebcamWnd = _AviCap_CapCreateCaptureWindow($hWnd, 0, 0, 640, 480, 1)
GUICtrlCreateLabel("Драйвер:", 12, 498, 52, 17)
$hDriver = GUICtrlCreateCombo("", 74, 495, 226, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$hDriverConn = GUICtrlCreateButton("Подключить", 306, 493, 75, 25)
$hDriverDisconnect = GUICtrlCreateButton("Отключить", 390, 493, 75, 25)
$hCreateBmp = GUICtrlCreateButton("Сделать снимок", 522, 493, 107, 25)
$vVideoFileLabel = GUICtrlCreateLabel("Файл видео:", 12, 530, 421, 17)
$hVideoSel = GUICtrlCreateButton("...", 442, 530, 36, 25)
$hRecStart = GUICtrlCreateButton("Старт", 489, 530, 66, 25)
$hRecStop = GUICtrlCreateButton("Стоп", 565, 530, 66, 25)
Local $aDriversInfo, $i, $sData=""
$aDriversInfo = _AviCap_CapGetDriverDescription()
If NOT @Error Then
For $i = 1 To $aDriversInfo[0][0]
If $sData = "" Then
$sData = $aDriversInfo[$i][0]&": "&$aDriversInfo[$i][1]&" - "&$aDriversInfo[$i][2]
Else
$sData &= "|"&$aDriversInfo[$i][0]&": "&$aDriversInfo[$i][1]&" - "&$aDriversInfo[$i][2]
EndIF
Next
EndIF
GUICtrlSetData($hDriver, $sData)
GUICtrlSetState($hDriverDisconnect, $GUI_DISABLE)
GUICtrlSetState($hCreateBmp, $GUI_DISABLE)
GUICtrlSetState($hRecStart, $GUI_DISABLE)
GUICtrlSetState($hRecStop, $GUI_DISABLE)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_AviCap_RecVideo_Stop($hWebcamWnd)
_AviCap_CapDriverDisconnect($hWebcamWnd)
_AviCap_DeleteCaptureWindow($hWebcamWnd)
_AviCap_UnloadDll()
Exit
Case $hDriverConn
$sData = GUICtrlRead($hDriver)
If $sData = "" Then ContinueLoop
GUICtrlSetState($hDriverConn, $GUI_DISABLE)
$iDriverIndex = StringLeft($sData, 1)
_AviCap_CapDriverConnect($hWebcamWnd, $iDriverIndex, 1, 10)
GUICtrlSetState($hDriverDisconnect, $GUI_ENABLE)
GUICtrlSetState($hCreateBmp, $GUI_ENABLE)
$sAviFile = ""
GUICtrlSetData($vVideoFileLabel, "Файл видео: "&$sAviFile)
Case $hDriverDisconnect
GUICtrlSetState($hDriverDisconnect, $GUI_DISABLE)
GUICtrlSetState($hCreateBmp, $GUI_DISABLE)
GUICtrlSetState($hRecStart, $GUI_DISABLE)
GUICtrlSetState($hRecStop, $GUI_DISABLE)
_AviCap_CapDriverDisconnect($hWebcamWnd)
GUICtrlSetState($hDriverConn, $GUI_ENABLE)
$sAviFile = ""
GUICtrlSetData($vVideoFileLabel, "Файл видео: "&$sAviFile)
Case $hCreateBmp
$sOutFile = FileSaveDialog("Сохранить как", @ScriptDir, "Изображения (*.bmp;*.jpg)", 18, @HOUR&"-"&@MIN&"-"&@SEC&".bmp")
If @Error Then ContinueLoop
_AviCap_CapFileSaveDib($hWebcamWnd, $sOutFile)
If @Error Then MsgBox(0+48, @Error, "Ошибка сохранения кадра", 2, $hWnd)
Case $hVideoSel
$sOutFile = FileSaveDialog("Сохранить как", @ScriptDir, "Видео (*.avi)", 18, @HOUR&"-"&@MIN&"-"&@SEC&".avi")
If @Error Then ContinueLoop
_AviCap_RecVideo_SetOutVideoFile($hWebcamWnd, $sOutFile)
If @Error Then MsgBox(0+48, @Error, "Ошибка применения файла", 2, $hWnd)
_AviCap_RecVideo_Config($hWebcamWnd, 1, 1, 0, 0)
If @Error Then MsgBox(0+48, @Error, "Ошибка применения настроек", 2, $hWnd)
$sAviFile = $sOutFile
GUICtrlSetData($vVideoFileLabel, "Файл видео: "&$sAviFile)
GUICtrlSetState($hRecStart, $GUI_ENABLE)
Case $hRecStart
If $sAviFile = "" Then ContinueLoop
GUICtrlSetState($hRecStart, $GUI_DISABLE)
_AviCap_RecVideo_Start($hWebcamWnd)
If @Error Then
MsgBox(0+48, @Error, "Ошибка начала записи", 2, $hWnd)
GUICtrlSetState($hRecStart, $GUI_ENABLE)
ContinueLoop
EndIF
GUICtrlSetState($hRecStop, $GUI_ENABLE)
Case $hRecStop
GUICtrlSetState($hRecStop, $GUI_DISABLE)
_AviCap_RecVideo_Stop($hWebcamWnd)
If @Error Then MsgBox(0+48, @Error, "Ошибка завершения записи", 2, $hWnd)
GUICtrlSetState($hRecStart, $GUI_ENABLE)
EndSwitch
WEnd
Файл: AviCap.zip
История версий:
1.0: 11:04 19.10.2017
Сисок функций:
Список функций:
• Запуск:
_AviCap_LoadDll()
$hWebcamWnd = _AviCap_CapCreateCaptureWindow($hWnd, $iPosX, $iPosY, $iWidth, $iHeight, $iWindowId=1)
_AviCap_CapDriverConnect($hWebcamWnd, $iDriverIndex=0, $fScale=1, $iUpdateMsec=1)
• Снимки
_AviCap_CapFileSaveDib($hWebcamWnd, $sOutFile)
_AviCap_RecVideo_SetOutVideoFile($hWebcamWnd, $sOutVideoFile)
_AviCap_RecVideo_Start($hWebcamWnd)
_AviCap_RecVideo_Stop($hWebcamWnd)
_AviCap_RecVideo_Config($hWebcamWnd, $fYield=0, $fCaptureAudio=1, $fAbortLeftMouse=1, $fAbortRightMouse=1)
• Другое
_AviCap_CapGetDriverDescription()
_AviCap_CapDlgVideoformat($hWebcamWnd)
_AviCap_CapDlgVideocompression($hWebcamWnd)
_AviCap_CapDlgVideosource($hWebcamWnd)
• Завершение
_AviCap_CapDriverDisconnect($hWebcamWnd)
_AviCap_DeleteCaptureWindow($hWebcamWnd)
_AviCap_UnloadDll()
Описание функций:
• Запуск:
_AviCap_LoadDll()
$hWebcamWnd = _AviCap_CapCreateCaptureWindow($hWnd, $iPosX, $iPosY, $iWidth, $iHeight, $iWindowId=1)
_AviCap_CapDriverConnect($hWebcamWnd, $iDriverIndex=0, $fScale=1, $iUpdateMsec=1)
• Снимки
_AviCap_CapFileSaveDib($hWebcamWnd, $sOutFile)
_AviCap_RecVideo_SetOutVideoFile($hWebcamWnd, $sOutVideoFile)
_AviCap_RecVideo_Start($hWebcamWnd)
_AviCap_RecVideo_Stop($hWebcamWnd)
_AviCap_RecVideo_Config($hWebcamWnd, $fYield=0, $fCaptureAudio=1, $fAbortLeftMouse=1, $fAbortRightMouse=1)
• Другое
_AviCap_CapGetDriverDescription()
_AviCap_CapDlgVideoformat($hWebcamWnd)
_AviCap_CapDlgVideocompression($hWebcamWnd)
_AviCap_CapDlgVideosource($hWebcamWnd)
• Завершение
_AviCap_CapDriverDisconnect($hWebcamWnd)
_AviCap_DeleteCaptureWindow($hWebcamWnd)
_AviCap_UnloadDll()
Описание функций:
Описание функций:
• Запуск:
Загружает библиотеки avicap32.dll и user32.dll в память:
_AviCap_LoadDll
Создает элемент (дочернее окно) веб-камеры в указанном окне:
_AviCap_CapCreateCaptureWindow
Посылает сообщение о подключении драйвера веб-камеры:
_AviCap_CapDriverConnect
• Снимки
Сохраняет кадр камеры в указанный (.BMP; .JPG) файл:
_AviCap_CapFileSaveDib
Задает конечный видео (.AVI) файл, в который будет выполняться запись:
_AviCap_RecVideo_SetOutVideoFile
Начинает запись видео с веб-камеры в указанный:
_AviCap_RecVideo_Start
Остановить запись видео в файл:
_AviCap_RecVideo_Stop
Настраивает запись видео:
_AviCap_RecVideo_Config
• Другое
Возвращает 2D массив с информацией о драйверах веб-камеры:
_AviCap_CapGetDriverDescription()
Открывает диалог вибора настроек формата видео (разрешение и глубина цвета):
_AviCap_CapDlgVideoformat
Открывает диалог вибора настроек сжатия:
_AviCap_CapDlgVideocompression
Открывает диалог вибора источника видео:
_AviCap_CapDlgVideosource
• Завершение
Отключает драйвер веб-камеры:
_AviCap_CapDriverDisconnect
Удаляет ранее созданное окно (элемент) веб-камеры:
_AviCap_DeleteCaptureWindow
Выгружает библиотеки avicap32.dll и user32.dll:
_AviCap_UnloadDll
• Запуск:
Загружает библиотеки avicap32.dll и user32.dll в память:
_AviCap_LoadDll
Создает элемент (дочернее окно) веб-камеры в указанном окне:
_AviCap_CapCreateCaptureWindow
Посылает сообщение о подключении драйвера веб-камеры:
_AviCap_CapDriverConnect
• Снимки
Сохраняет кадр камеры в указанный (.BMP; .JPG) файл:
_AviCap_CapFileSaveDib
Задает конечный видео (.AVI) файл, в который будет выполняться запись:
_AviCap_RecVideo_SetOutVideoFile
Начинает запись видео с веб-камеры в указанный:
_AviCap_RecVideo_Start
Остановить запись видео в файл:
_AviCap_RecVideo_Stop
Настраивает запись видео:
_AviCap_RecVideo_Config
• Другое
Возвращает 2D массив с информацией о драйверах веб-камеры:
_AviCap_CapGetDriverDescription()
Открывает диалог вибора настроек формата видео (разрешение и глубина цвета):
_AviCap_CapDlgVideoformat
Открывает диалог вибора настроек сжатия:
_AviCap_CapDlgVideocompression
Открывает диалог вибора источника видео:
_AviCap_CapDlgVideosource
• Завершение
Отключает драйвер веб-камеры:
_AviCap_CapDriverDisconnect
Удаляет ранее созданное окно (элемент) веб-камеры:
_AviCap_DeleteCaptureWindow
Выгружает библиотеки avicap32.dll и user32.dll:
_AviCap_UnloadDll
Комментарий автора:
Признаюсь, что эта UDF немного похожа на уже написанные UDFs "Webcam.au3", но в моей UDF больше возможностей. Также мой код является менее конфликтным (специфицеские имена глобальных переменных ($h_AviCap_Dll, $h_AviCap_Msg), в отличии от $avi, $user (которые можно увидеть в каждой 2-ой UDF); убраны константы; имеется обработка ошибок; скрипт не вылетает после выполнения функций по отключению веб-камеры и закрытию DLL; и др. мелкие "приятности" (см. описание функций).
О записи видео:
- Возможна запись только в формат .AVI (файл получается огромный, нужно придумывать конвертирование тем-же ffmpeg, например);
+ Имеется возможность не приостанавливать работу скрипта на время записи, отключить запись звука, отключить остановку записи при нажатии: Esc, ЛКМ, ПКМ (по умолчанию включено).
В общем, считаю, что моя UDF (на сегодняшний день) самая лучшая из всех имеющихся
О записи видео:
- Возможна запись только в формат .AVI (файл получается огромный, нужно придумывать конвертирование тем-же ffmpeg, например);
+ Имеется возможность не приостанавливать работу скрипта на время записи, отключить запись звука, отключить остановку записи при нажатии: Esc, ЛКМ, ПКМ (по умолчанию включено).
В общем, считаю, что моя UDF (на сегодняшний день) самая лучшая из всех имеющихся
Источник: autoit-script.ru, msdn.microsoft.com
Автор: Astel064