Как программно работать с integrated webcam?

Тема в разделе "WASM.WIN32", создана пользователем paralvic, 19 июн 2011.

  1. paralvic

    paralvic Пархоменко Александр Викторович

    Публикаций:
    0
    Регистрация:
    20 ноя 2010
    Сообщения:
    294
    Адрес:
    Нижний Новгород
    Камера встроенная. Драйвер стандартный виндосовский.
    Не видели примеров кода для такого зверя?
     
  2. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Почитай сайт http://directshow.wonderu.com/. Если будут проблемы и вопросы, то обращайся. Я уже намучился и реализовал работу с камерами на FASM.
     
  3. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    1. Сначала создайте обычное окно.
    2. В этом окне создайте фрейм для вывода данных с камеры. Примерно так:
    Код (Text):
    1.         .data
    2.              DLLname db "avicap32.dll",0
    3.              p1name db "capCreateCaptureWindowA",0
    4.              hCapture dd 0
    5.         .code
    6.     invoke LoadLibrary,addr DLLname
    7.     mov hLibrary, eax
    8.     invoke GetProcAddress,hLibrary,addr p1name
    9.     mov lpMes, eax
    10.     push 0
    11.     push hWnd
    12.     push 240
    13.     push 320
    14.     push 20
    15.     push 150
    16.     push WS_CHILD or WS_VISIBLE
    17.     push offset CapName
    18.     call lpMes
    19.     mov hCapture,eax
    20.     invoke SendMessage, hCapture, WM_CAP_DRIVER_CONNECT, 0, 0
    21.     invoke SendMessage, hCapture, WM_CAP_SET_SCALE, TRUE, 0
    22.     invoke SendMessage, hCapture, WM_CAP_SET_PREVIEWRATE, 66, 0
    3. Далее, в зависимости от того что вам нужно, граббить видео или картинку, используете различные флаги в SendMessage. Пример для получения картинки:
    Код (Text):
    1.      
    2.      .data
    3.            szTitle db "Save file as",0
    4.            szFilterBMP db "Bitmap files",0,"*.bmp",0,0
    5.            szFileName db "c:\1.bmp",0 ;256 dup(0)
    6.      .data?
    7.     ofn     OPENFILENAME <>
    8.      .code
    9.     invoke SendMessage, hCapture, WM_CAP_GRAB_FRAME, 0, 0
    10.     invoke FillBuffer,addr szFileName,length szFileName,0
    11.     invoke SaveFileName,hWnd,addr szTitle,addr szFilterBMP
    12.     .if szFileName[0] != 0
    13.         invoke SendMessage, hCapture, WM_CAP_SAVEDIB, 0, addr szFileName
    14.     .endif
    15.  
    16.            FillBuffer proc lpBuffer:DWORD,lenBuffer:DWORD,TheChar:BYTE
    17.       push edi
    18.       mov edi, lpBuffer   ; address of buffer
    19.       mov ecx, lenBuffer  ; buffer length
    20.       mov  al, TheChar    ; load al with character
    21.       rep stosb           ; write character to buffer until ecx = 0
    22.       pop edi
    23.     ret
    24.          FillBuffer endp
    25.  
    26.          SaveFileName proc hParent:DWORD,lpTitle:DWORD,lpFilter:DWORD
    27.     mov ofn.lStructSize, sizeof OPENFILENAME
    28.     m2m ofn.hWndOwner, hParent
    29.     m2m ofn.hInstance, hInstance
    30.     m2m ofn.lpstrFilter, lpFilter
    31.     m2m ofn.lpstrFile, offset szFileName
    32.     mov ofn.nMaxFile, sizeof szFileName
    33.     m2m ofn.lpstrTitle, lpTitle
    34.     mov ofn.Flags, OFN_EXPLORER or OFN_LONGNAMES
    35.     invoke GetSaveFileName, addr ofn
    36.     ret
    37.         SaveFileName endp
     
  4. HPC

    HPC New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2011
    Сообщения:
    37
    Код (Text):
    1. format PE GUI 4.0
    2. entry codestart
    3.  
    4. include 'win32a.inc'
    5.  
    6.   IDD_MAIN                     =  100
    7.   WM_CAP_DRIVER_CONNECT        =  WM_USER + 10
    8.   WM_CAP_DRIVER_DISCONNECT     =  WM_USER + 11
    9.   WM_CAP_FILE_SAVEDIB          =  WM_USER + 25
    10.   WM_CAP_SET_PREVIEW           =  WM_USER + 50
    11.   WM_CAP_SET_PREVIEWRATE       =  WM_USER + 52
    12.   WM_CAP_SET_SCALE             =  WM_USER + 53
    13.   ID_START                     =  201
    14.   ID_STOP                      =  202
    15.   ID_CLICK                     =  203
    16.   _camtitle                    db 'FASMWEBCAM'
    17.  
    18.   _filename  db 'IMAGE.BMP'    ; Filename
    19.   nDevice    dd   0            ; Device Number -> It can range from 0 through 9
    20.   nFPS       dd 100            ; Frames per second. Must be 1000/FPS. E.g. 20 FPS = 50
    21.  
    22. section '.data' data readable writeable
    23.   hInstance     dd ?
    24.   hWebcam       dd ?
    25.  
    26. section '.code' code readable executable
    27.   codestart:
    28.     invoke  GetModuleHandle, 0
    29.     mov     [hInstance], eax
    30.     invoke  DialogBoxParam, eax, IDD_MAIN, HWND_DESKTOP, MainDlg, 0
    31.     invoke  ExitProcess, 0
    32.  
    33.   proc MainDlg hdlg, msg, wparam, lparam
    34.     push    ebx esi edi
    35.     cmp     [msg], WM_INITDIALOG
    36.     je      .wminitdlg
    37.     cmp     [msg], WM_COMMAND
    38.     je      .wmcommand
    39.     cmp     [msg], WM_CLOSE
    40.     je      .wmclose
    41.     xor     eax, eax
    42.     jmp     .finish
    43.     .wminitdlg:
    44.       invoke  capCreateCaptureWindow, _camtitle, WS_VISIBLE + WS_CHILD, 10, 10,\
    45.                                         266, 252, [hdlg], 0
    46.       mov     [hWebcam], eax
    47.       jmp     .finish
    48.     .wmcommand:
    49.       cmp     [wparam], BN_CLICKED shl 16 + ID_START
    50.       je      .startbutton
    51.       cmp     [wparam], BN_CLICKED shl 16 + ID_STOP
    52.       je      .stopbutton
    53.       cmp     [wparam], BN_CLICKED shl 16 + ID_CLICK
    54.       je      .clickbutton
    55.     .wmclose:
    56.       invoke  SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0
    57.       invoke  EndDialog, [hdlg], 0
    58.     .finish:
    59.       pop     edi esi ebx
    60.       ret
    61.     .startbutton:
    62.       invoke  SendMessage,  [hWebcam], WM_CAP_DRIVER_CONNECT, [nDevice], 0
    63.       invoke  SendMessage,  [hWebcam], WM_CAP_SET_SCALE, TRUE, 0
    64.       invoke  SendMessage,  [hWebcam], WM_CAP_SET_PREVIEWRATE, [nFPS], 0
    65.       invoke  SendMessage,  [hWebcam], WM_CAP_SET_PREVIEW, TRUE, 0
    66.       jmp     .finish
    67.     .stopbutton:
    68.       invoke  SendMessage, [hWebcam], WM_CAP_DRIVER_DISCONNECT, _camtitle, 0
    69.       jmp     .finish
    70.     .clickbutton:
    71.       invoke  SendMessage, [hWebcam], WM_CAP_FILE_SAVEDIB, 0, _filename
    72.       jmp     .finish
    73.   endp
    74.  
    75. section '.idata' import data readable writeable
    76.  
    77.   library kernel, 'KERNEL32.DLL',\
    78.           user,   'USER32.DLL',\
    79.           avicap, 'AVICAP32.DLL'
    80.  
    81.   import  kernel,\
    82.           GetModuleHandle,'GetModuleHandleA',\
    83.           ExitProcess,    'ExitProcess'
    84.  
    85.   import  user,\
    86.           DialogBoxParam, 'DialogBoxParamA',\
    87.           EndDialog,      'EndDialog',\
    88.           SendMessage,    'SendMessageA'
    89.  
    90.   import  avicap,\
    91.           capCreateCaptureWindow, 'capCreateCaptureWindowA'
    92.  
    93. section '.rsrc' resource data readable
    94.   directory     RT_DIALOG, dialogs
    95.   resource      dialogs,\
    96.                 IDD_MAIN, LANG_ENGLISH + SUBLANG_DEFAULT, main_dialog
    97.   dialog        main_dialog, 'FASM Webcam', 0, 0, 190, 200, WS_CAPTION + WS_POPUP + WS_SYSMENU +\
    98.                                                             DS_MODALFRAME + DS_CENTER
    99.                 dialogitem 'BUTTON', 'START', ID_START,  10, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
    100.                 dialogitem 'BUTTON', 'STOP',  ID_STOP,   70, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
    101.                 dialogitem 'BUTTON', 'CLICK', ID_CLICK, 130, 170, 50, 20, WS_VISIBLE + WS_TABSTOP
    102.   enddialog
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    DirectShow или Capture API.
     
  6. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    DirectShow в самый раз. Capture API уже устаревшая технология. Не все камеры поддерживают ее. особенно внешние