Страница: 1 | 2 |
Вопрос: web-камера и массив
Добавлено: 11.09.09 13:27
Номер ответа: 18Автор ответа: portC
Вопросов: 14Ответов: 101
Web-сайт: feshin.info Профиль | | #18
Добавлено: 12.09.09 14:39
как правильно применить Dim im1 As Image ?
Ответить
Номер ответа: 19Автор ответа: portC
Вопросов: 14Ответов: 101
Web-сайт: feshin.info Профиль | | #19
Добавлено: 12.09.09 14:49
Простейший код датчика движения:
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long , ByVal wMsg As Long , ByVal wParam As Long , lParam As Any) As Long
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String , ByVal dwStyle As Long , ByVal X As Long , ByVal Y As Long , ByVal nWidth As Long , ByVal nHeight As Long , ByVal hwndParent As Long , ByVal nID As Long ) As Long
Private mCapHwnd As Long
Private Const CONNECT As Long = 1034
Private Const DISCONNECT As Long = 1035
Private Const GET_FRAME As Long = 1084
Private Const COPY As Long = 1054
Dim P() As Long
Dim POn() As Boolean
Dim inten As Integer
Dim i As Integer , j As Integer
Dim Ri As Long , Wo As Long
Dim RealRi As Long
Dim c As Long , c2 As Long
Dim R As Integer , G As Integer , B As Integer
Dim R2 As Integer , G2 As Integer , B2 As Integer
Dim Tppx As Single , Tppy As Single
Dim Tolerance As Integer
Dim RealMov As Integer
Dim Counter As Integer
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim LastTime As Long
Dim kartinka As PictureBox
Dim im1 As Image
Private Sub Form_Load()
Picture1.Width = 640 * Screen.TwipsPerPixelX
Picture1.Height = 480 * Screen.TwipsPerPixelY
Slider2.Value = 8
Slider1.Value = 20
inten = Slider2.Value
Tolerance = Slider1.Value
Tppx = Screen.TwipsPerPixelX
Tppy = Screen.TwipsPerPixelY
ReDim POn(640 / inten, 480 / inten)
ReDim P(640 / inten, 480 / inten)
STARTCAM
End Sub
Private Sub Slider1_Click()
Tolerance = Slider1.Value
End Sub
Private Sub Slider2_Click()
inten = Slider2.Value
End Sub
Private Sub Timer1_Timer()
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
Clipboard.Clear
Ri = 0
Wo = 0
LastTime = GetTickCount
For i = 0 To 640 / inten - 1
For j = 0 To 480 / inten - 1
c = Picture1.Point(i * inten * Tppx, j * inten * Tppy)
R = c Mod 256
G = (c \ 256) Mod 256
B = (c \ 256 \ 256) Mod 256
c2 = P(i, j)
R2 = c2 Mod 256
G2 = (c2 \ 256) Mod 256
B2 = (c2 \ 256 \ 256) Mod 256
If Abs(R - R2) < Tolerance And Abs(G - G2) < Tolerance And Abs(B - B2) < Tolerance Then
Ri = Ri + 1
POn(i, j) = True
Else
Wo = Wo + 1
P(i, j) = Picture1.Point(i * inten * Tppx, j * inten * Tppy)
Picture1.PSet (i * inten * Tppx, j * inten * Tppy), vbRed
POn(i, j) = False
End If
Next j
Next i
RealRi = 0
For i = 1 To 640 / inten - 2
For j = 1 To 480 / inten - 2
If POn(i, j) = False Then
If POn(i, j + 1) = False Then
If POn(i, j - 1) = False Then
If POn(i + 1, j) = False Then
If POn(i - 1, j) = False Then
RealRi = RealRi + 1
Picture1.PSet (i * inten * Tppx, j * inten * Tppy), vbGreen
End If
End If
End If
End If
End If
Next j
Next i
On Error Resume Next
Label1.Caption = " äâèæåíèé " & Int(Wo / (Ri + Wo) * 100) & " % " & vbCrLf & " íàñòîÿùèõ äâèæåíèé: " & RealRi & vbCrLf _
& " çà âðåìÿ : " & GetTickCount - LastTime
End Sub
Sub STOPCAM()
DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0
Timer1.Enabled = False
End Sub
Sub STARTCAM()
mCapHwnd = capCreateCaptureWindow("WebcamCapture" , 0, 0, 0, 640, 480, Me .hwnd, 0)
DoEvents
SendMessage mCapHwnd, CONNECT, 0, 0
Timer1.Enabled = True
End Sub
Вот как сделать, чтобы этот код работал даже при свернутой (невидимой) форме (или хотябы без вывода изображения)?
Ответить
Номер ответа: 20Автор ответа: portC
Вопросов: 14Ответов: 101
Web-сайт: feshin.info Профиль | | #20
Добавлено: 12.09.09 16:04
такой вариант может прокатить?
Dim pic As StdPicture
Set pic = Clipboard.GetData
только как получать что-то типа c = Picture1.Point(i.........
?
Ответить
Номер ответа: 21Автор ответа: portC
Вопросов: 14Ответов: 101
Web-сайт: feshin.info Профиль | | #21
Добавлено: 12.09.09 22:27
ни у кого умных мыслей нет, как подправить код?
Ответить
Страница: 1 | 2 |
Поиск по форуму