Hallo Volker,
lustiges Tool, aber wie hast Du das mit der Webcam hinbekommen?
Die meisten Leute hier sind ja daran gescheitert, trotz Avicap usw.
KidsCam - Spass mit der Webcam
Hi Delle,
Zum Beispiel das hier:
Ich gehe für KidsCam noch einen Schritt weiter und überführe das Bild in einen Memorybereich. Das mache ich mit
GetBitmapBits_(img.l, BufferSize.l, SourceBuffer.l)
Dann kann ich mit PeekB und PokeB bearbeiten und schreibe das Ergebnis in einen anderen Codebereich (ShowBuffer). Am Ende kopiere ich das dann zurück in ein Bild:
SetBitmapBits_(img.l, BufferSize.l, ShowBuffer.l)
Dann kann ich es mit DrawImage(img.l, 10, 12, 640, 480) wieder darstellen. Eine verbesserte und noch schnellere Methode findet sich noch im oben angegebenen Thread (arbeitet mit Callbacks und #WM_CAP_SET_CALLBACK_FRAME).
Volker
Verstehe ich nicht ganz. Im englischen Forum hab ich dazu sogar alle codes ausgetauscht (http://forums.purebasic.com/english/vie ... hp?t=17018). Ich hab diverse Hilfe dazu selbst aus diesem Forum gehabt (soweit ich mich entsinne)...lustiges Tool, aber wie hast Du das mit der Webcam hinbekommen?
Die meisten Leute hier sind ja daran gescheitert, trotz Avicap usw.
Zum Beispiel das hier:
Code: Alles auswählen
; initialize webcam
If OpenLibrary(0, "avicap32.dll")
*capAddress = IsFunction(0, "capCreateCaptureWindowA")
hWndC = CallFunctionFast(*capAddress, "My Capture Window", #WS_CHILD | #WS_VISIBLE, 695, 12, 40, 30, WindowID(), 1)
SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, KameraID.l, 0) ; connect driver
SendMessage_(hWndC,#WM_CAP_SET_SCALE, #True, 0) ; no stretching
SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0) ; start preview
SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 50, 0) ; set preview-rate (milliseconds)
Else
MessageRequester("Scotty, we have a problem...","Sorry, but I cant find or open avicap32.dll...", #MB_ICONERROR)
EndIf
; SOME LOOP CODE
; retrieve picture
SendMessage_(hWndC, #WM_CAP_EDIT_COPY, 0, 0)
img.l = GetClipboardData(#PB_ClipboardImage)
; render result
StartDrawing(WindowOutput())
DrawImage(img.l, 10, 12, 640, 480)
StopDrawing()
; END SOME LOOP CODE
GetBitmapBits_(img.l, BufferSize.l, SourceBuffer.l)
Dann kann ich mit PeekB und PokeB bearbeiten und schreibe das Ergebnis in einen anderen Codebereich (ShowBuffer). Am Ende kopiere ich das dann zurück in ein Bild:
SetBitmapBits_(img.l, BufferSize.l, ShowBuffer.l)
Dann kann ich es mit DrawImage(img.l, 10, 12, 640, 480) wieder darstellen. Eine verbesserte und noch schnellere Methode findet sich noch im oben angegebenen Thread (arbeitet mit Callbacks und #WM_CAP_SET_CALLBACK_FRAME).
Volker