FoxPro/Visual FoxPro - Captura de Imagenes

 
Vista:

Captura de Imagenes

Publicado por Antonio (36 intervenciones) el 11/05/2007 00:39:06
Tengo un código que captura una foto mediante una camara web, y funciona muy bien, pero al conectar otro dispositvo USB, como una impresora o algo asi, se bloquea y ya no toma fotos, al desconectar la impresora funciona bien. Abajo esta el código, si alguien me pudiera ayudar, Gracias.

Espero su respuesta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
lnombrefot='001'
LOCAL oForm
oForm = CREATEOBJECT("Tform")
oForm.Show(1)
return
 
DEFINE CLASS Tform As Form
#DEFINE WM_CAP_START 0x0400 
#DEFINE WM_CAP_DRIVER_CONNECT (WM_CAP_START+10) 
#DEFINE WM_CAP_DRIVER_DISCONNECT (WM_CAP_START+11) 
#DEFINE WM_CAP_DRIVER_GET_CAPS (WM_CAP_START+14) 
#DEFINE WM_CAP_SET_PREVIEW (WM_CAP_START+50) 
#DEFINE WM_CAP_SET_OVERLAY (WM_CAP_START+51) 
#DEFINE WM_CAP_SET_PREVIEWRATE (WM_CAP_START+52) 
#DEFINE WM_CAP_GET_STATUS (WM_CAP_START+54) 
#DEFINE WM_CAP_GRAB_FRAME (WM_CAP_START+60) 
 
*Width=540  && para poner imagenes del click.
Width=340
Height=310
Autocenter=.T.
Caption="Captura de Foto del Interno"
MinButton=.F.
MaxButton=.F.
*Icon=wicoform
hWindow=0
hCapture=0
capWidth=0
capHeight=0
capOverlay=0
 
ADD OBJECT cmdGetFrame As CommandButton WITH Default=.T.,;
Left=10, Top=264, Height=27, Width=90, Caption="Tomar Foto",;
Enabled=.F.
 
ADD OBJECT cmdPreview As CommandButton WITH Default=.T.,;
Left=100, Top=264, Height=27, Width=100, Caption="Video",;
Enabled=.F.
 
ADD OBJECT cmdClose As CommandButton WITH Cancel=.T.,;
Left=202, Top=264, Height=27, Width=130, Caption=" Salir "
 
PROCEDURE Activate
IF THIS.hWindow = 0
DECLARE INTEGER GetFocus IN user32
THIS.hWindow = GetFocus()
THIS.CreateCaptureWindow
THIS.DriverConnect
ENDIF
 
PROCEDURE Destroy
THIS.ReleaseCaptureWindow
 
PROCEDURE cmdClose.Click
THIS.Destroy
ThisForm.Release
 
PROCEDURE cmdGetFrame.Click
ThisForm.GetFrame
 
PROCEDURE cmdPreview.Click
ThisForm.StartPreview
 
PROCEDURE GetFrame
#DEFINE WM_CAP_FILE_SAVEDIB (WM_CAP_START + 25) 
 
LOCAL lcFile
 
lcFile = lnombrefot
 
THIS.msg(WM_CAP_GRAB_FRAME, 0,0)
THIS.msg(WM_CAP_FILE_SAVEDIB, 0, lcFile,1)
 
PROCEDURE CreateCaptureWindow
#DEFINE WS_CHILD 0x40000000 
#DEFINE WS_VISIBLE 0x10000000 
 
DECLARE INTEGER capCreateCaptureWindow IN avicap32;
STRING lpszWindowName, LONG dwStyle,;
INTEGER x, INTEGER y,;
INTEGER nWidth, INTEGER nHeight,;
INTEGER hParent, INTEGER nID
 
THIS.hCapture = capCreateCaptureWindow("",;
WS_CHILD+WS_VISIBLE,;
10,8,320,240, THIS.hWindow, 1)
 
PROCEDURE DriverConnect
THIS.msg(WM_CAP_DRIVER_CONNECT, 0,0)
IF THIS.IsCaptureConnected()
   THIS.GetCaptureDimensions
   STORE .T. TO THIS.cmdGetFrame.Enabled,;
   THIS.cmdPreview.Enabled
   this.cmdPreview.Click
ELSE
   THIS.Caption = THIS.Caption + ": failed to connect"
ENDIF
 
PROCEDURE DriverDisconnect
THIS.msg(WM_CAP_DRIVER_DISCONNECT, 0,0)
 
PROCEDURE ReleaseCaptureWindow
IF THIS.hCapture <> 0
   THIS.DriverDisconnect
   DECLARE INTEGER DestroyWindow IN user32 INTEGER hWnd
   = DestroyWindow(THIS.hCapture)
   THIS.hCapture = 0
   thisform.Release
ENDIF
 
PROCEDURE msg(msg, wParam, lParam, nMode)
IF THIS.hCapture = 0
RETURN
ENDIF
 
IF VARTYPE(nMode) <> "N" Or nMode=0
DECLARE INTEGER SendMessage IN user32;
INTEGER hWnd, INTEGER Msg,;
INTEGER wParam, INTEGER lParam
= SendMessage(THIS.hCapture, msg, wParam, lParam)
ELSE
DECLARE INTEGER SendMessage IN user32;
INTEGER hWnd, INTEGER Msg,;
INTEGER wParam, STRING @lParam
= SendMessage(THIS.hCapture, msg, wParam, @lParam)
ENDIF
 
FUNCTION IsCaptureConnected
* analyzing fCaptureInitialized member of the CAPDRIVERCAPS structure
#DEFINE CAPDRIVERCAPS_SIZE 44 
LOCAL cBuffer, nResult
cBuffer = Repli(Chr(0),CAPDRIVERCAPS_SIZE)
THIS.msg(WM_CAP_DRIVER_GET_CAPS, Len(cBuffer), @cBuffer, 1)
THIS.capOverlay = buf2dword(SUBSTR(cBuffer,5,4))
nResult = Asc(SUBSTR(cBuffer, 21,1))
RETURN (nResult<>0)
 
PROCEDURE GetCaptureDimensions
* reading uiImageWidth and uiImageHeight members
* of the CAPSTATUS structure
#DEFINE CAPSTATUS_SIZE 76 
LOCAL cBuffer
cBuffer = Repli(Chr(0), CAPSTATUS_SIZE)
THIS.msg(WM_CAP_GET_STATUS, Len(cBuffer), @cBuffer, 1)
THIS.capWidth = buf2dword(SUBSTR(cBuffer,1,4))
THIS.capHeight = buf2dword(SUBSTR(cBuffer,5,4))
 
PROCEDURE StartPreview
THIS.msg(WM_CAP_SET_PREVIEWRATE, 30,0)
THIS.msg(WM_CAP_SET_PREVIEW, 1,0)
IF THIS.capOverlay <> 0
THIS.msg(WM_CAP_SET_OVERLAY, 1,0)
ENDIF
 
PROCEDURE StopPreview
THIS.msg(WM_CAP_SET_PREVIEW, 0,0)
ENDDEFINE
 
FUNCTION buf2dword(lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
BitLShift(Asc(SUBSTR(lcBuffer, 2,1)), 8) +;
BitLShift(Asc(SUBSTR(lcBuffer, 3,1)), 16) +;
BitLShift(Asc(SUBSTR(lcBuffer, 4,1)), 24)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Captura de Imagenes

Publicado por fernando paguay (1 intervención) el 02/04/2008 21:45:36
Mi querido amigo ese es el gran problema de copiar codigos ajenos !!!

Ese código es mío y por supuesto que se lo que sucede al conectar otro USB y por supuesto que conozco la solución.

Claro que esta ya tiene un precio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Captura de Imagenes

Publicado por XICO (1 intervención) el 17/09/2008 19:17:20
MI estimado fernando me parece sarcastico el comentario, ademas es una pagina donde se coloca codigo para compartir, y si tu con quieres compartirlos pues es respetable al menos da soluciones.
saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Captura de Imagenes

Publicado por Marcos Brito (4 intervenciones) el 30/10/2019 20:57:19
De acuerdo con Xico. Todo lo que se publica es público y se puede usar. Lo no se me hace ético es poner trampas si explicar, para que después se lucre con.eso. Eso de decir "es psaa por copiar..." está mal y no aplica aquí en.la comunidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Luis Enrique Agudelo Romero

RE:Captura de Imagenes

Publicado por Luis Enrique Agudelo Romero (2 intervenciones) el 27/11/2009 14:10:03
Amigo, te puedo colaborar con lo de la imagen desde VFP, escribeme a mi correo y te envio un ejemlpo y los pasos.

Bye bye
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Captura de Imagenes

Publicado por Raul (2 intervenciones) el 07/09/2010 22:50:15
Hola amigos, tengo ese codigo, pero se me presenta un problema, necesito capturar fotos a 1000x1000, ese es el requerimeinto, pero lo maximo que puedo tomar es a 640x480. Como puedo solucionar este tema. Gracias por su ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Captura de Imagenes

Publicado por Jesus Olmos (2 intervenciones) el 29/01/2012 03:14:02
Buenas tardes Fernando:
yo he probado tu código y no puedo menos que felicitarte... llevaba mucho tiempo buscando al asi.... asi que por adelantado mi felicitacion...
Ojala puedas y queiras ayudarme a mi ahora.... ese código me funciona correcatmente en mi equipo, pero en cuanto lo instalo en servidor de clietne no se conecta ninguna cam (y la hay y funciona con su programa actual...)... Alguna idea de porque??

Las gracias van por adelantado si puedes ayudarme..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Captura de Imagenes

Publicado por luisfer (1 intervención) el 17/05/2013 05:31:53
muy bien, pero para que no sea desde un prg,
como se hace para hacerlo diseñando el formulario uno mismo y poniendo los botones correspondientes y tambien el objeto ole y cual seria y que comandos son los que manipilan la webcam.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar