Seite 1 von 1

Pixelfarbe auslesen vom Webcambild ?

Verfasst: 06.10.2013 10:13
von funkheld
Hallo, guten Tag.
Wie kann man bitte hier von : ImageID(v_bild) (400x300) die Pixelfarbe schnell auslesen ?
Was muss man ändern, damit das Camerabild nicht über das Clipboard läuft ?

Danke.
Gruss

Code: Alles auswählen

#WM_CAP_START = #WM_USER
#WM_CAP_UNICODE_START = #WM_USER +100
#WM_CAP_PAL_SAVEA = #WM_CAP_START + 81
#WM_CAP_PAL_SAVEW = #WM_CAP_UNICODE_START + 81
#WM_CAP_UNICODE_END = #WM_CAP_PAL_SAVEW
#WM_CAP_ABORT = #WM_CAP_START + 69
#WM_CAP_DLG_VIDEOCOMPRESSION = #WM_CAP_START + 46
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43
#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_DRIVER_GET_NAMEA = #WM_CAP_START + 12
#WM_CAP_DRIVER_GET_NAMEW = #WM_CAP_UNICODE_START + 12
#WM_CAP_DRIVER_GET_VERSIONA = #WM_CAP_START + 13
#WM_CAP_DRIVER_GET_VERSIONW = #WM_CAP_UNICODE_START + 13
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_END = #WM_CAP_UNICODE_END
#WM_CAP_FILE_ALLOCATE = #WM_CAP_START + 22
#WM_CAP_FILE_GET_CAPTURE_FILEA = #WM_CAP_START + 21
#WM_CAP_FILE_GET_CAPTURE_FILEW = #WM_CAP_UNICODE_START + 21
#WM_CAP_FILE_SAVEASA = #WM_CAP_START + 23
#WM_CAP_FILE_SAVEASW = #WM_CAP_UNICODE_START + 23
#WM_CAP_FILE_SAVEDIBA = #WM_CAP_START + 25
#WM_CAP_FILE_SAVEDIBW = #WM_CAP_UNICODE_START + 25
#WM_CAP_FILE_SET_CAPTURE_FILEA = #WM_CAP_START + 20
#WM_CAP_FILE_SET_CAPTURE_FILEW = #WM_CAP_UNICODE_START + 20
#WM_CAP_FILE_SET_INFOCHUNK = #WM_CAP_START + 24
#WM_CAP_GET_AUDIOFORMAT = #WM_CAP_START + 36
#WM_CAP_GET_CAPSTREAMPTR = #WM_CAP_START + 1
#WM_CAP_GET_MCI_DEVICEA = #WM_CAP_START + 67
#WM_CAP_GET_MCI_DEVICEW = #WM_CAP_UNICODE_START + 67
#WM_CAP_GET_SEQUENCE_SETUP = #WM_CAP_START + 65
#WM_CAP_GET_STATUS = #WM_CAP_START + 54
#WM_CAP_GET_USER_DATA = #WM_CAP_START + 8
#WM_CAP_GET_VIDEOFORMAT = #WM_CAP_START + 44
#WM_CAP_GRAB_FRAME = #WM_CAP_START + 60
#WM_CAP_GRAB_FRAME_NOSTOP = #WM_CAP_START + 61
#WM_CAP_PAL_AUTOCREATE = #WM_CAP_START + 83
#WM_CAP_PAL_MANUALCREATE = #WM_CAP_START + 84
#WM_CAP_PAL_OPENA = #WM_CAP_START + 80
#WM_CAP_PAL_OPENW = #WM_CAP_UNICODE_START + 80
#WM_CAP_PAL_PASTE = #WM_CAP_START + 82
#WM_CAP_SEQUENCE = #WM_CAP_START + 62
#WM_CAP_SEQUENCE_NOFILE = #WM_CAP_START + 63
#WM_CAP_SET_AUDIOFORMAT = #WM_CAP_START + 35
#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85
#WM_CAP_SET_CALLBACK_ERRORA = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_ERRORW = #WM_CAP_UNICODE_START + 2
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_STATUSA = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_STATUSW = #WM_CAP_UNICODE_START + 3
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_MCI_DEVICEA = #WM_CAP_START + 66
#WM_CAP_SET_MCI_DEVICEW = #WM_CAP_UNICODE_START + 66
#WM_CAP_SET_OVERLAY = #WM_CAP_START + 51
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_SET_SCROLL = #WM_CAP_START + 55
#WM_CAP_SET_SEQUENCE_SETUP = #WM_CAP_START + 64
#WM_CAP_SET_USER_DATA = #WM_CAP_START + 9
#WM_CAP_SET_VIDEOFORMAT = #WM_CAP_START + 45
#WM_CAP_SINGLE_FRAME = #WM_CAP_START + 72
#WM_CAP_SINGLE_FRAME_CLOSE = #WM_CAP_START + 71
#WM_CAP_SINGLE_FRAME_OPEN = #WM_CAP_START + 70
#WM_CAP_STOP = #WM_CAP_START + 68

InitSprite()

OpenWindow(0,0,0,800,600,"camera",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),10,10,400,300,0,0,0)

v_bild=CreateImage(#PB_Any,320,240)

AddWindowTimer(0, 123, 1)

OpenLibrary(0, "avicap32.dll")
*capAddress = GetFunction(0, "capCreateCaptureWindowA")
hWndC = CallFunctionFast(*capAddress, 0, #WS_CHILD | #WS_VISIBLE, 450, 10, 1,1, WindowID(0),1)
SendMessage_(hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
SendMessage_(hWndC, #WM_CAP_SET_PREVIEWRATE, 16, 0)

Repeat
  Event.l = WaitWindowEvent(0)
  
  SendMessage_(hWnDC, #WM_CAP_EDIT_COPY, 0 , 0)
  GetClipboardImage(v_bild)

  StartDrawing(ScreenOutput())
    DrawImage(ImageID(v_bild), 0, 0,400,300)
  StopDrawing()

  FlipBuffers()
Until Event = #PB_Event_CloseWindow

SendMessage_(hWndC, #WM_CAP_STOP, 0, 0)
SendMessage_(hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
DestroyWindow_(hWndC)
CloseLibrary(0)

Re: Pixelfarbe auslesen vom Webcambild ?

Verfasst: 13.10.2013 01:36
von Regenduft
funkheld hat geschrieben:Hallo, guten Tag.
Wie kann man bitte hier von : ImageID(v_bild) (400x300) die Pixelfarbe schnell auslesen ?
Nur so eine spontane Idee: Da Du eh mit StartDrawing() auf den Screen zeichnest einfach von dort per Point() oder direkt per DrawingBuffer().

Re: Pixelfarbe auslesen vom Webcambild ?

Verfasst: 15.10.2013 13:45
von funkheld
Jup, danke.
Das hatte ich mir auch überlegt, weil es ja ein normales erfassbares Bild ist mit den Grafikbefehlen usw.

Nur wie geht es jetzt am schnellsten?

Gruss

Re: Pixelfarbe auslesen vom Webcambild ?

Verfasst: 15.10.2013 13:49
von NicTheQuick
Am schnellsten geht es per DrawingBuffer(). Beispiele dazu findest du in der Hilfe und auch im Forum genug.