Jump to content
Fivewin Brasil

1) otree navegar na arvore! 2) webca


neto_23

Recommended Posts

STATIC cWebCamDriver := "Microsoft WDM Image Capture"

STATIC _oWebcam_ := nil, DllWebCam, hDllRTF

Function Main

...

...

REDEFINE IMAGE oImg ID 4010 OF oScr UPDATE ADJUST FILE cFile

REDEFINE BUTTON ID 4012 OF oScr ACTION (BuscarImagem(oImg, "C_"+StrZero(NumCliente,5)))

*

return

Function BuscarImagem(oImg,cCodigo)

LOCAL oWnd, oMenu

MENU oMenu

MENUITEM "[ CAPTURAR ]" ACTION (oWC:Save(oImg,'FOTOS\'+cCodigo+'.bmp'),oWC:End(), oWnd:End())

MENUITEM "[ TAMANHO ]" ACTION (oWc:Format())

MENUITEM "[ Sair ]" ACTION (oWC:End(), oWnd:End())

ENDMENU

oWC := tWebCamPhoto():New()

DEFINE WINDOW oWnd FROM 0,0 TO 18,35 MENU oMenu TITLE "Captura Imagem da WebCam"

ACTIVATE WINDOW oWnd ON INIT ( oWC:CreateWnd(oWnd,0,0,220,140), oWc:Connect() )

Return(.t.)

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Link to comment
Share on other sites

************************

esotu enviando a classe que utilizo

*************************************


/**********************************************************

*

* Clase tWebCamPhoto ( Sólo para FWH )

* Objetivo: Capturar fotos con una Webcam

*

* César E. Lozada, cesarlozada@hotmail.com

* Los Teques, Venezuela - 22/06/2003

*

* Modificada para FWH2.5 - 13/12/2005

* Correção do posicionamento e tamanho da janela - 14.04.2008 by LAugusto

***********************************************************/

#define WM_CAP_START WM_USER

#define WM_CAP_DRIVER_CONNECT WM_CAP_START + 10

#define WM_CAP_DRIVER_DISCONNECT WM_CAP_START + 11

#define WM_CAP_SET_PREVIEW WM_CAP_START + 50

#define WM_CAP_SET_PREVIEWRATE WM_CAP_START + 52

#define WM_CAP_SET_SCALE WM_CAP_START + 53

#define WM_CAP_EDIT_COPY WM_CAP_START + 30

#define WM_CAP_FILE_SAVEDIB WM_CAP_START + 25

#define WM_CAP_DLG_VIDEOFORMAT WM_CAP_START + 41

#define WM_CAP_DLG_VIDEOSOURCE WM_CAP_START + 42

#define WM_CAP_GET_STATUS WM_CAP_START + 54

#define LIB_LOAD 1

#define LIB_FREE 2

#define LIB_FREE_ALL 3

//-------------------------------------------------------

// EXIT Procedure WebcamDisconnect()

// Asegura la desconexión de la cámara.

//-------------------------------------------------------

EXIT Procedure WebcamDisconnect()

IF _oWebcam_ <> nil

_oWebcam_:Disconnect()

_owebcam_ := nil

EndIF

Return

****************************************************************************

#xtranslate BYNAME [, ] => :: := [; :: := ]

CLASS tWebCamPhoto

DATA nFrameRate INIT 66 //Velocidad de actualización de la WebCam

DATA nJpgQuality INIT 75 //Calidad de los JPG

DATA hWnd //Handle de la ventana de la imagen

DATA aDrivers //Drivers de captura disponibles

DATA nDriver //número del driver instalado + 1

DATA cDriver

DATA lConnected INIT .F. //¿Está conectada>

DATA oWnd

METHOD New( cDriver, lSelect ) CONSTRUCTOR // Construye el objeto. cDriver es el nombre

// del driver a usar, recomendado guardar en ini.

// Si lSelect=.T. muestra la lista para escogerlo

METHOD CreateWnd( oWnd, nLeft, nTop, nWidth, nHeight, nStyle, cTitle ) // Crea la ventana para la cámara en oWnd.

METHOD Connect // Conecta la cámara

METHOD Disconnect // Desconecta la cámara

METHOD Clipboard(oImg) //Captura la imagen en clipboard. Opcionalmente

//actualiza a oImg con la imagen capturada

METHOD Save( oImg, cFile, nQuality ) //Captura la imagen y guarda en archivo (BMP/JPG).

//Opcionalmente actualiza a oImg con la imagen capturada

METHOD Source() //Configura la fuente de la webcam

METHOD Format() //Configura el formato de la imagen

METHOD GetStatus() //Status de la imagen

METHOD Resize() //Redimensiona la ventana de la imagen

// Finaliza el objeto

METHOD End() INLINE ( ::Disconnect(), DllLoadAndFree( "avicap32.dll", LIB_FREE ), IF( !Empty( ::oWnd ), ::oWnd:End(), nil ) )

ENDCLASS

#xtranslate UTRAN( ) => Upper( StrTran( , " " ) )

*===========================================================================

METHOD New( cDriver, lSelect )

DEFAULT cDriver := cWebCamDriver

DEFAULT lSelect := .F.

::aDrivers := WebCamList()

::nDriver := aScan( ::aDrivers,{ |u| UTran( cDriver ) == UTran( u ) } )

IF ::nDriver = 0 .or. lSelect

::nDriver := WebCamSelect( ::nDriver, ::aDrivers )

ENDIF

_oWebCam_ := Self

Return Self

*===========================================================================

METHOD CreateWnd( oWnd, nTop, nLeft, nWidth, nHeight, nStyle, cTitle )

Local hWnd, cDriver

DEFAULT nTop := 0, nLeft := 0, nWidth := 160, nHeight := 120

DEFAULT nStyle := nOr( WS_VISIBLE, WS_CHILD, WS_BORDER )

*? ::nDriver,::aDrivers[::nDriver]

IF ::nDriver > 0

cDriver := ::aDrivers[::nDriver]

::hWnd := wCamCreaWnd( cDriver, nStyle, nLeft, nTop, nWidth, nHeight, oWnd:hWnd, 0 )

::oWnd := tWindow():New()

::oWnd:hWnd := ::hWnd

IF cTitle <> nil

::oWnd:SetText( cTitle )

ENDIF

ENDIF

Return ::hWnd

*===========================================================================

METHOD Connect()

IF ::hWnd <> nil

IF SendMessage( ::hWnd, WM_CAP_DRIVER_CONNECT, ::nDriver-1, 0 ) = 1

cWebCamDriver := ::aDrivers[::nDriver]

SendMessage( ::hWnd, WM_CAP_SET_SCALE, 1, 0 )

SendMessage( ::hWnd, WM_CAP_SET_PREVIEWRATE, ::nFrameRate, 0 )

SendMessage( ::hWnd, WM_CAP_SET_PREVIEW, 1, 0 )

::lConnected := .T.

::Resize()

Else

::lConnected := .F.

::hWnd := nil

EndIF

EndIF

Return ::lConnected

*===========================================================================

METHOD Disconnect

IF ::hWnd <> Nil .and. ::lConnected

IF SendMessage( ::hWnd, WM_CAP_DRIVER_DISCONNECT, 0, 0 ) = 1

::lConnected := .F.

_oWebCam_ := nil

EndIF

ENDIF

Return nil

*===========================================================================

METHOD Clipboard( oImg )

Local lSucc := .F.

IF ::hWnd <> nil

lSucc := ( SendMessage( ::hWnd, WM_CAP_EDIT_COPY, 0, 0 ) = 1 )

IF lSucc .and. oImg <> nil

oImg:LoadFromClipboard()

oImg:Refresh()

ENDIF

ENDIF

Return lSucc

//--------------------------------------------------------------------------

METHOD Save( oImg, cFile, nQuality, bAction )

LOCAL lSucc := .F., cExec

LOCAL cFileExt := UPPER( cFileExt( cFile ) )

LOCAL cFileName := IF( AT( ".", cFile ) > 0, SUBSTR( cFile, 1, AT( ".", cFile ) - 1 ), cFile )

IF ::hWnd <> nil

CursorWait()

IF ( cFileExt == "JPG" .OR. cFileExt == "JPEG" )

IF ::Clipboard()

DEFAULT nQuality := ::nJpgQuality

::nJpgQuality := MAX( MIN( INT( nQuality ), 100 ), 10 )

cExec := "bmptojpg.exe" + ' -q' + LTRIM( STR( ::nJpgQuality, 3, 0 ) ) + ' -c' + cFileName + ' -o -s'

WAITRUN( cExec, 0 )

ENDIF

ELSEIF cFileExt == 'BMP'

SendMessage( ::hWnd, WM_CAP_FILE_SAVEDIB, 0, cFile )

ENDIF

CursorArrow()

SysRefresh()

IF !( lSucc := FILE( cFile ) )

MsgAlert( "Não foi possível criar " + cFile, "Atenção Operador" )

ELSE

IF !Empty( bAction ) .and. cFileExt == "JPG"

Eval( bAction, cFile )

ENDIF

IF oImg <> nil

oImg:cResName := ""

oImg:cBmpFile := cFile

oImg:Reload()

ENDIF

ENDIF

ENDIF

Return lSucc

//--------------------------------------------------------------------------

METHOD Source()

IF ::hWnd <> nil .and. ::lConnected

SendMessage( ::hWnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0 )

EndIF

Return nil

*===========================================================================

METHOD Format()

IF ::hWnd <> nil .and. ::lConnected

SendMessage( ::hWnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0 )

::Resize()

EndIF

Return nil

*===========================================================================

#include "Struct.ch"

METHOD GetStatus()

Local oPoint, oStatus, cBuffer

STRUCT oPoint

MEMBER X AS LONG

MEMBER Y AS LONG

ENDSTRUCT

STRUCT oStatus

MEMBER nWidth AS LONG // Width of the image

MEMBER nHeight AS LONG // Height of the image

MEMBER lLive AS LONG // Now Previewing video?

MEMBER lOverlay AS LONG // Now Overlaying video?

MEMBER lScale AS LONG // Scale image to client?

MEMBER oXYScroll AS STRING LEN 8 // AS POINTAPI // Scroll position

MEMBER lDefPalette AS LONG // Using default driver palette?

MEMBER lAudHardware AS LONG // Audio hardware present?

MEMBER lCapFile AS LONG // Does capture file exist?

MEMBER nCurVidFrm AS LONG // # of video frames cap'td

MEMBER nCurVidDropped AS LONG // # of video frames dropped

MEMBER nCurWavSamples AS LONG // # of wave samples cap'td

MEMBER nCurTimeEl AS LONG // Elapsed capture duration

MEMBER hPalCur AS LONG // Current palette in use

MEMBER lCapturing AS LONG // Capture in progress?

MEMBER nReturn AS LONG // Error value after any operation

MEMBER nVidAlloc AS LONG // Actual number of video buffers

MEMBER wAudAlloc AS LONG // Actual number of audio buffers

ENDSTRUCT

oPoint:x := 0

oPoint:y := 0

oStatus:oXYScroll := oPoint:cBuffer

cBuffer := oStatus:cBuffer

SendMessage( ::hWnd, WM_CAP_GET_STATUS, Len( cBuffer ), @cBuffer )

oStatus:cBuffer := cBuffer

Return oStatus

*===========================================================================

#define HWND_BOTTOM 1

#define SWP_NOMOVE 2

#define SWP_NOSIZE 1

#define SWP_NOZORDER 4

*===========================================================================

METHOD Resize()

Local oStatus

IF ::hWnd <> nil .and. ::lConnected

SysRefresh()

oStatus := ::GetStatus()

// Just do it!

oStatus:nWidth := 200 // 14.04.2008 by LAugusto

oStatus:nHeight := 200 // 14.04.2008 by LAugusto

SetWindowPos( ::hWnd,;

HWND_BOTTOM,;

0,;

0,;

oStatus:nWidth,;

oStatus:nHeight,;

nOr( SWP_NOMOVE, SWP_NOZORDER ) )

SysRefresh()

EndIF

Return nil

****************************************************************************

Function WebcamList()

Local aDrivers := {}, nDriver := 0

Local cName, cVersion, nLen := 255

WHILE .T.

cName := space( nLen )

cVersion := space( nLen )

IF !wCamGetDrvDesc( nDriver, @cName, nLen, @cVersion, nLen )

EXIT

ENDIF

IF chr(0)$cName

cName := Left( cName, At(chr(0), cName ) - 1 )

EndIF

IF chr(0) $cVersion

cVersion := Left( cVersion, At(chr(0), cVersion ) - 1 )

EndIF

aAdd( aDrivers, cName )

nDriver++

ENDDO

Return aDrivers

****************************************************************************

Function WebcamSelect( nDriver, aDrivers )

Local oDlg, oCbx

Local cDriver

Local lSelect:=.F.

DEFAULT nDriver := 0, aDrivers := WebcamList()

IF Empty( aDrivers )

MsgAlert( 'Webcam Não Instalada', 'Atenção Operador' )

return 0

ELSEIF Len( aDrivers ) = 1

nDriver := 1

ELSE

cDriver := aDrivers[Max( 1, nDriver )]

DEFINE DIALOG oDlg FROM 0,0 to 6,40 TITLE "Selecione uma webcam"

@ 0,0 COMBOBOX oCbx VAR cDriver OF oDlg ITEMS aDrivers SIZE 160,50 PIXEL

@ 1.5, 4 BUTTON "Selecionar" OF oDlg SIZE 40,12 ACTION( nDriver := oCbx:nAt, oDlg:End() )

@ 1.5,16 BUTTON "Cancelar" OF oDlg SIZE 40,12 ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED

ENDIF

Return nDriver

****************************************************************************

Function WebCamVersion( nDriver )

Local cName, cVersion, nLen := 255

DEFAULT nDriver := 0

IF nDriver > 0

cName := space( nLen )

cVersion := space( nLen )

IF wCamGetDrvDesc( nDriver - 1, @cName, nLen, @cVersion, nLen )

IF chr(0) $cVersion

cVersion := Left( cVersion, At(chr(0), cVersion ) - 1 )

EndIF

ELSE

cVersion := nil

ENDIF

ENDIF

Return cVersion

****************************************************************************

EXIT PROCEDURE DllFreeAll()

DllLoadAndFree( "avicap32.dll", LIB_FREE_ALL )

Return

****************************************************************************

Function DllLoadAndFree( cLib, nAction )

Local nPos, hDll, u

Static aSt_hDll

DEFAULT nAction := LIB_LOAD

IF aSt_hDll = nil

aSt_hDll := {}

ENDIF

IF nAction = LIB_FREE_ALL

aEval( aSt_hDll,{ |u| IF( Abs( u[2] ) > 32, FreeLibrary(u[ 2] ), nil ) } )

aSt_hDll := nil

ELSE

nPos := aScan( aSt_hDll,{ |u| u[1] == Upper( Alltrim( cLib ) ) } )

IF nAction = LIB_LOAD

IF nPos = 0

hDll := LoadLibrary(cLib)

aAdd( aSt_hDll,{ Upper( Alltrim( cLib ) ), hDll } )

ELSE

hDll := aSt_hDll[nPos, 2 ]

ENDIF

ELSEIF nAction = LIB_FREE .and. nPos > 0

IF Abs( aSt_hDll[nPos,2] ) > 32

FreeLibrary( aSt_hDll[nPos,2] )

ENDIF

aDel( aSt_hDll, nPos )

aSize( aSt_hDll, Len( aSt_hDll ) - 1 )

ENDIF

ENDIF

Return hDll

****************************************************************************

DLL32 STATIC FUNCTION wCamGetDrvDesc( nDriver AS _INT,;

cName AS STRING,;

nName AS LONG,;

cVersion AS STRING,;

nVersion AS LONG ) AS BOOL PASCAL;

FROM "capGetDriverDescriptionA" LIB DllLoadAndFree( "avicap32.dll", LIB_LOAD )

************************************************************************

DLL32 STATIC FUNCTION wCamCreaWnd( cTitle AS STRING,;

nStyle AS LONG,;

X AS LONG,;

Y AS LONG,;

nWidth AS LONG,;

nHeight AS LONG,;

hWndParent AS LONG,;

nID AS LONG ) AS LONG PASCAL;

FROM "capCreateCaptureWindowA" LIB DllLoadAndFree( "avicap32.dll", LIB_LOAD )

************************************************************************

id=code>id=code>

Em Cristo!

Rone - Itajubá(MG)id=red>

xHB build 1.1.0 (SimpLex) & BCC 5.5.1 & FW 7.12 + xDevStudio

A pessoa que pensa que sabe alguma coisa, ainda não tem a sabedoria que precisa. (1 Cor 8, 2)id=blue>

Editado por - theotokos on 28/10/2010 14:26:59

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...