PDA

View Full Version : کار با API های Capture card



farhad_shiri_ex
دوشنبه 21 اسفند 1385, 15:24 عصر
دوستان اگر کسی تجربه ای راجع به استفاده از سخت افزارهای جانبی مانند RVG,ORAL CAMERA,DIGITAL CAMERA,WEB CAMERA دارد لطفا بیان کنید!
با تشکر

binyaz2003
جمعه 01 تیر 1386, 22:45 عصر
با این کد میتونید تصاویر وب کم رو نمایش دهید.اگر کسی در مورد کارتهای tv یا capture کردن از اونها اطلاعاتی دارد اینجا بزارد.

LOCAL oForm
oForm = CREATEOBJECT("Tform")
oForm.SHOW(1)
* end of main

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=340
HEIGHT=310
AUTOCENTER=.T.
CAPTION="Using Video Capture"
MINBUTTON=.F.
MAXBUTTON=.F.
hWindow=0
hCapture=0
capWidth=0
capHeight=0
capOverlay=0

ADD OBJECT cmdGetFrame AS COMMANDBUTTON WITH DEFAULT=.T.,;
LEFT=15, TOP=264, HEIGHT=27, WIDTH=90, CAPTION="Get Frame",;
ENABLED=.F.

ADD OBJECT cmdPreview AS COMMANDBUTTON WITH DEFAULT=.T.,;
LEFT=106, TOP=264, HEIGHT=27, WIDTH=100, CAPTION="Preview Video",;
ENABLED=.F.

ADD OBJECT cmdClose AS COMMANDBUTTON WITH CANCEL=.T.,;
LEFT=250, TOP=264, HEIGHT=27, WIDTH=70, CAPTION="Close"

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
THISFORM.RELEASE

PROCEDURE cmdGetFrame.CLICK
#DEFINE IMAGE_BITMAP 0
#DEFINE LR_COPYRETURNORG 0x4
#DEFINE CF_BITMAP 3
DECLARE LONG CopyImage IN user32 LONG,LONG,LONG,LONG,LONG
DECLARE LONG EmptyClipboard IN user32
DECLARE LONG SetClipboardData IN user32 LONG,LONG
DECLARE LONG CloseClipboard IN user32
DECLARE LONG OpenClipboard IN user32 LONG
hpic=CopyImage(ThisForm.hCapture,IMAGE_BITMAP,0,0, LR_COPYRETURNORG)
OpenClipboard(ThisForm.HWND)
EmptyClipboard()
SetClipboardData(CF_BITMAP,hpic)
CloseClipboard()
THISFORM.GetFrame

PROCEDURE cmdPreview.CLICK
THISFORM.StartPreview

PROCEDURE GetFrame
THIS.msg(WM_CAP_GRAB_FRAME, 0,0)

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.CAPTION = THIS.CAPTION + ": connected, " +;
LTRIM(STR(THIS.capWidth)) + "x" +;
LTRIM(STR(THIS.capHeight))
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
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)

farhad_shiri_ex
شنبه 02 تیر 1386, 09:08 صبح
جناب بی نیاز عزیز!
اگر ممکن است منبع اطلاعاتی خود را می توانید در اختیار من قرار دهید اگر دوست داشتید من هم راهکارهایی دارم برای ارتباط با سخت افزارهای جانبی در VFP9

binyaz2003
شنبه 02 تیر 1386, 09:20 صبح
فقط اینترنت

farhad_shiri_ex
یک شنبه 03 تیر 1386, 18:27 عصر
فقط اینترنت

چرا اینقدر محافظه کاران جواب دادید بهتر بود می گفتید نمیگم یا خدای نکرده فکر کردید ما اینترنت ندیدم...

rezamim
یک شنبه 03 تیر 1386, 20:17 عصر
با اجازه جناب حسینی
فکر کنم منظور ایشان این بوده که با جستجو در اینترنت این کد را بدست آورده اند.
ایشان چنین خصوصیاتی ندارند
اینهم منبعشان :
http://fox.wikis.com/wc.dll?Wiki~VideoCaptureApi~VFP

binyaz2003
یک شنبه 03 تیر 1386, 22:28 عصر
من چیزی نگم بهتره!

ali51prog
دوشنبه 04 تیر 1386, 09:14 صبح
جناب بی نیاز تشکر.

mehran_337
دوشنبه 04 تیر 1386, 09:43 صبح
چرا اینقدر محافظه کاران جواب دادید بهتر بود می گفتید نمیگم یا خدای نکرده فکر کردید ما اینترنت ندیدم...

تنها خصوصیتی که در ایشان وجود ندارد همین خصلت است . چون همیشه برای مشکلات بچه ها بسیار با حوصله و دلسوزانه پاسخ می دهند .
نمونه کارهای ایشان در سایتهای برتر خارجی در حال نقد و بررسی می باشد. به همین دلیل نوشتند اینترنت .

farhad_shiri_ex
دوشنبه 04 تیر 1386, 11:52 صبح
تنها خصوصیتی که در ایشان وجود ندارد همین خصلت است . چون همیشه برای مشکلات بچه ها بسیار با حوصله و دلسوزانه پاسخ می دهند .
نمونه کارهای ایشان در سایتهای برتر خارجی در حال نقد و بررسی می باشد. به همین دلیل نوشتند اینترنت .

با سلام !
خوب در اینکه جناب بی نیاز برای فراهم کردن جواب سوالات زحمت میکشند شکی نیست اما چون سورسی که بی نیاز ارسال کرد ه اند را قبلا استفاده کرده بودم. می خواستم بدانم منبع اطلاعاتی ایشان کجا بوده است تا شاید مطالب بیشتری از ان منبع بدست بیاورم .

همین بس اینکه دعوا نداره دوستان...

وصال1386
دوشنبه 04 تیر 1386, 20:21 عصر
استاد بی نیاز
شخصا از تلاشهای بی دریق جنابعالی در جهت رفع مشکلات برنامه نویسی و راهنمایی دوستان تشکر کرده و براتون آرزوی موفقیت میکنم.:تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق: :تشویق:

ali51prog
چهارشنبه 06 تیر 1386, 15:37 عصر
آقا این کدها برای همه نوع وب کم مناسبه یا اینکه مدل خاصی رو ساپورت میکنه.

binyaz2003
چهارشنبه 06 تیر 1386, 19:11 عصر
برای همه کار میکنه