Aktuelle Zeit: 24.11.2020 19:25

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 67 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 19.12.2010 21:37 
Offline
Benutzeravatar

Registriert: 29.03.2010 22:01
danke erstmal! jetzt muss ich noch schauen dass ich es mit allen 3 cams zum laufen bringe!

mfg deify

_________________
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 20.12.2010 11:10 
Offline

Registriert: 28.11.2010 13:07
Wohnort: Germany
Hallo deify,
warum fragst Du in deinen Threads nicht mal ob überhaupt ein neues "gültiges" Bild vorhanden ist ?

Grüsse Joshy

_________________
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 20.12.2010 20:15 
Offline
Benutzeravatar

Registriert: 29.03.2010 22:01
das war ja eine meiner fragen (: wie soll ich das machen? sobald es ein image lesen kann ist es ja "gültig" oder?
gibt es da etwa eine methode um das zu prüfen?

mfg deify

_________________
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 21.12.2010 18:24 
Offline

Registriert: 28.11.2010 13:07
Wohnort: Germany
deify hat geschrieben:
...gibt es da etwa eine methode um das zu prüfen?
Ja sicher aber die kennst Du doch!

Grüsse Joshy
pseudo code:
Code:
proc CaptureThread(...)
  ; start capturing     
  While Quit=False and doCapture(deviceno)=Ok
    ; warte auf fertiges Bild
    While Quit=False and isCaptureDone(deviceno) = 0
      Delay(5)
    Wend
    ; get fresh image data
    ; ...
  Wend
end proc

_________________
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 22.12.2010 17:56 
Offline
Benutzeravatar

Registriert: 29.03.2010 22:01
ah ja! :D ich habe gedacht du meinst ob der buffer nachträglich kontrolliert werden kann! ich habe diese funktion komplett vergessen weil ich sie zu testzwecken kurzzeitig mal rausgelöscht hatte (:

danke dir für den tip

_________________
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 25.12.2010 17:23 
Offline
Benutzeravatar

Registriert: 29.03.2010 22:01
hey jungs! Frohe Weihnachten euch allen erstmal (:

ich konnte in letzter zeit nicht weiter am projekt arbeiten! aber ich habe festgestellt, dass das flackern des bildes nicht am code lag! wenn ich den von chris verwende flackert es nicht! (liegt wahrscheinlich am drawing) veränder ich den code aber so, dass er mit catchimage direkt auf das gadget zeichnet, so flackert es auch! leider ist der code mit startdrawing aber nicht "multithread fähig" da ich ja wie schon erwähnt alle 3 cambilder brauche!

noch irgendjemand eine idee woher es dann kommt? oder muss ich in seinen code auch wieder eine bildüberprüfung mit max 30fps einbauen? wenn ich die iscapturedone funktion verwende erhalte ich leider auch nur eine maximale fpszahl von 17fps...

EDIT:
des weiteren bin ich auch zu dumm irgendetwas zu finden, mit dem ich die einzelbilder als video aus dem buffer speichern kann... ich weiß dass es mit avicap bzw der api geht, da ich aber 2 verschiedene methoden zum aufnehmen verwende (sonst gehen nicht alle 3) und die avicap nicht darunter fällt, bin ich ratlos.... wäre ich auch bei der avicap :D

hoffe ihr könnt mit helfen

mfg deify

_________________
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 25.12.2010 20:29 
Offline

Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf
Hier das ganze mal mit 2 Kameras und mit zwei Thread's,
mit startdrawing.

Code:

EnableExplicit

IncludeFile "escapi.pbi"

If escapiOpen() = 0
  MessageRequester("Kamera", "DLL 'escapi.dll' nicht vorhanden!")
  End
EndIf

;- Enumerations / DataSections
;- Windows
Enumeration
  #Window_0
EndEnumeration

;- Gadgets
Enumeration
  #Image_0
  #Image_1
EndEnumeration

;- Define
Define Event.l, EventWindow.l, EventGadget.l, EventType.l, EventMenu.l

;- Global
Global quit.i, q1.i, q2.i, capture01TH.i, capture02TH.i
Global mx.i, my.i

Procedure OpenWindow_Window_0()
  Protected res.i
  res = #False
  If OpenWindow(#Window_0, 0, 0, 640, 240, "Kamera", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ImageGadget(#Image_0, 0, 0, 320, 240, 0)
    ImageGadget(#Image_1, 320, 0, 320, 240, 0)
    res = #True
  EndIf
  ProcedureReturn res
EndProcedure

Procedure.i gray(color.i, method.i = 0)
  Protected R.i, G.i, B.i, gray.i
  R = Red(color)
  G = Green(color)
  B = Blue(color)
  If method = 1
    gray = (R + G + B) / 3
  Else
    gray = 0.299 * R + 0.587 * G + 0.114 * B
  EndIf
  ProcedureReturn RGB(gray, gray, gray)
EndProcedure

Procedure capture01(temp.i)

  Protected width.l, height.l, image.i
  Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
  Protected scp.SimpleCapParams
  Protected y.i, x.i, pixel.i, rgb.i
  Protected depth.i, fps_soll.i, delay.i
  Protected t1.q, t2.q, time.q

  Static fps_counter.i, fps_timer.i, fps_res.i

  deviceno = 0

  width  = 320
  height = 240

  fps_soll = 30
  delay    = 1000 / fps_soll

  image = CreateImage(#PB_Any, width, height, 24)
  SetGadgetState(#Image_0, ImageID(image))

  depth = ImageDepth(image)
  Debug "depth: " + Str(depth)

  initCOM()

  count = countCaptureDevices()

  Debug "count: " + Str(count)

  If count > 0

    bufferlength = 1000
    *namebuffer  = AllocateMemory(bufferlength)

    If *namebuffer > 0
      getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
      name$ = PeekS(*namebuffer, -1, #PB_Ascii)
      If name$ <> ""
        Debug "name: " + name$
        SetWindowTitle(#Window_0, name$)
      EndIf
    EndIf

    scp\mWidth     = width
    scp\mHeight    = height
    scp\mTargetBuf = AllocateMemory(scp\mWidth * scp\mHeight * 4)

    Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

    If scp\mTargetBuf > 0

      If initCapture(deviceno, @scp)

        Debug "initCapture"

        Repeat

          t1 = timeGetTime_()

          If fps_timer < t1
            fps_res     = fps_counter
            fps_timer   = t1 + 1000
            fps_counter = 0
          Else
            fps_counter + 1
          EndIf

          doCapture(deviceno)

          ;While isCaptureDone(deviceno) = 0
          ;  If quit = 1
          ;    Break
          ;  EndIf
          ;  Delay(1)
          ;Wend

          If quit = 1
            Break
          EndIf

          If StartDrawing(ImageOutput(image))

            For y = 0 To scp\mHeight - 1
              For x = 0 To scp\mWidth - 1
                pixel = PeekL(scp\mTargetBuf + (y*scp\mWidth + x) * 4)
                rgb   = RGB((pixel >> 16) & $FF, (pixel >> 8) & $FF, pixel & $FF)
                ;rgb   = gray(rgb)
                Plot(x, y, rgb)
              Next
            Next

            If mx > -1 And my > -1
              Circle(mx, my, 10, RGB(255, 0, 0))
            EndIf

            DrawText(10, 10, "FPS: " + Str(fps_res), RGB(255, 0, 0))

            StopDrawing()

            SetGadgetState(#Image_0, ImageID(image))

          EndIf

          t2 = timeGetTime_()

          time = t2 - t1
         
          If time < delay
            Delay(delay - time)
          Else
            Delay(1)
          EndIf 

        Until quit = 1

        deinitCapture(deviceno)

        Debug "deinitCapture"

      EndIf

    EndIf

    If *namebuffer > 0
      FreeMemory(*namebuffer)
    EndIf

    If scp\mTargetBuf > 0
      FreeMemory(scp\mTargetBuf)
    EndIf

  EndIf

EndProcedure

Procedure capture02(temp.i)

  Protected width.l, height.l, image.i
  Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
  Protected scp.SimpleCapParams
  Protected y.i, x.i, pixel.i, rgb.i
  Protected depth.i, fps_soll.i, delay.i
  Protected t1.q, t2.q, time.q

  Static fps_counter.i, fps_timer.i, fps_res.i

  deviceno = 1

  width  = 320
  height = 240

  fps_soll = 30
  delay    = 1000 / fps_soll

  image = CreateImage(#PB_Any, width, height, 24)
  SetGadgetState(#Image_1, ImageID(image))

  depth = ImageDepth(image)
  Debug "depth: " + Str(depth)

  initCOM()

  count = countCaptureDevices()

  Debug "count: " + Str(count)

  If count > 1

    bufferlength = 1000
    *namebuffer  = AllocateMemory(bufferlength)

    If *namebuffer > 0
      getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
      name$ = PeekS(*namebuffer, -1, #PB_Ascii)
      If name$ <> ""
        Debug "name: " + name$
        name$ = GetWindowTitle(#Window_0) + " | " + name$
        SetWindowTitle(#Window_0, name$)
      EndIf
    EndIf

    scp\mWidth     = width
    scp\mHeight    = height
    scp\mTargetBuf = AllocateMemory(scp\mWidth * scp\mHeight * 4)

    Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

    If scp\mTargetBuf > 0

      If initCapture(deviceno, @scp)

        Debug "initCapture"

        Repeat

          t1 = timeGetTime_()

          If fps_timer < t1
            fps_res     = fps_counter
            fps_timer   = t1 + 1000
            fps_counter = 0
          Else
            fps_counter + 1
          EndIf

          doCapture(deviceno)

          ;While isCaptureDone(deviceno) = 0
          ;  If quit = 1
          ;    Break
          ;  EndIf
          ;  Delay(1)
          ;Wend

          If quit = 1
            Break
          EndIf

          If StartDrawing(ImageOutput(image))

            For y = 0 To scp\mHeight - 1
              For x = 0 To scp\mWidth - 1
                pixel = PeekL(scp\mTargetBuf + (y*scp\mWidth + x) * 4)
                rgb   = RGB((pixel >> 16) & $FF, (pixel >> 8) & $FF, pixel & $FF)
                ;rgb   = gray(rgb)
                Plot(x, y, rgb)
              Next
            Next

            If mx > -1 And my > -1
              Circle(mx - 320, my, 10, RGB(255, 0, 0))
            EndIf

            DrawText(10, 10, "FPS: " + Str(fps_res), RGB(255, 0, 0))

            StopDrawing()

            SetGadgetState(#Image_1, ImageID(image))

          EndIf

          t2 = timeGetTime_()

          time = t2 - t1

          If time < delay
            Delay(delay - time)
          Else
            Delay(1)
          EndIf 

        Until quit = 1

        deinitCapture(deviceno)

        Debug "deinitCapture"

      EndIf

    EndIf

    If *namebuffer > 0
      FreeMemory(*namebuffer)
    EndIf

    If scp\mTargetBuf > 0
      FreeMemory(scp\mTargetBuf)
    EndIf

  EndIf

EndProcedure

If OpenWindow_Window_0()

  StickyWindow(#Window_0, 1)

  capture01TH = CreateThread(@capture01(), 0)
  capture02TH = CreateThread(@capture02(), 0)

  ;- Event loop
  Repeat

    Event       = WaitWindowEvent(100)
    EventGadget = EventGadget()
    EventType   = EventType()
    EventWindow = EventWindow()

    mx = WindowMouseX(#Window_0)
    my = WindowMouseY(#Window_0)

    Select Event

      Case #PB_Event_Gadget

        If EventGadget = #Image_0
        EndIf

      Case #PB_Event_CloseWindow

        quit = 1

    EndSelect

    q1 = IsThread(capture01TH)
    q2 = IsThread(capture02TH)

  Until quit = 1 And q1 = 0

EndIf

escapiClose()

End


_________________
PB v5.72 x86/x64
Windows 10 Pro 64bit


Zuletzt geändert von - chris - am 25.12.2010 20:47, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 25.12.2010 20:34 
Offline
Benutzeravatar

Registriert: 29.03.2010 22:01
:o seltsam! wieso kam dann bei mir eigentlich immer eine fehlermeldung, dass startdrawing nicht vor stopdrawing aufgerufen werden kann?

_________________
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 25.12.2010 20:46 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Zweimal fast die selbe Procedure ist ein bisschen unnötig. Normalerweise sollte da eine Allround-Procedure reichen, der man nur den entsprechenden Parameter mit gibt.

_________________
Ubuntu Gnome 20.04 LTS x64, PureBasic 5.72 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60, 5.71b2)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 3 webcams
BeitragVerfasst: 25.12.2010 20:56 
Offline

Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf
Mit drei verschieden Kameras geht es auch:

Code:

EnableExplicit

IncludeFile "escapi.pbi"

If escapiOpen() = 0
  MessageRequester("Kamera", "DLL 'escapi.dll' nicht vorhanden!")
  End
EndIf

;- Enumerations / DataSections
;- Windows
Enumeration
  #Window_0
EndEnumeration

;- Gadgets
Enumeration
  #Image_0
  #Image_1
  #Image_2
EndEnumeration

;- Images
Enumeration
  #Image_Image_0
EndEnumeration

;- Define
Define Event.l, EventWindow.l, EventGadget.l, EventType.l, EventMenu.l

;- Global
Global quit.i, q1.i, q2.i, q3.i, capture01TH.i, capture02TH.i, capture03TH.i
Global mx.i, my.i

Procedure OpenWindow_Window_0()
  Protected res.i
  res = #False
  If OpenWindow(#Window_0, 0, 0, 640, 480, "Kamera", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ImageGadget(#Image_0, 0, 0, 320, 240, 0)
    ImageGadget(#Image_1, 320, 0, 320, 240, 0)
    ImageGadget(#Image_2, 0, 240, 320, 240, 0)
    res = #True
  EndIf
  ProcedureReturn res
EndProcedure

Procedure.i gray(color.i, method.i = 0)
  Protected R.i, G.i, B.i, gray.i
  R = Red(color)
  G = Green(color)
  B = Blue(color)
  If method = 1
    gray = (R + G + B) / 3
  Else
    gray = 0.299 * R + 0.587 * G + 0.114 * B
  EndIf
  ProcedureReturn RGB(gray, gray, gray)
EndProcedure

Procedure capture01(temp.i)

  Protected width.l, height.l, image.i
  Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
  Protected scp.SimpleCapParams
  Protected y.i, x.i, pixel.i, rgb.i
  Protected depth.i, fps_soll.i, delay.i
  Protected t1.q, t2.q, time.q

  Static fps_counter.i, fps_timer.i, fps_res.i

  deviceno = 0

  width  = 320
  height = 240

  fps_soll = 30
  delay    = 1000 / fps_soll

  image = CreateImage(#PB_Any, width, height, 24)
  SetGadgetState(#Image_0, ImageID(image))

  depth = ImageDepth(image)
  Debug "depth: " + Str(depth)

  initCOM()

  count = countCaptureDevices()

  Debug "count: " + Str(count)

  If count > 0

    bufferlength = 1000
    *namebuffer  = AllocateMemory(bufferlength)

    If *namebuffer > 0
      getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
      name$ = PeekS(*namebuffer, -1, #PB_Ascii)
      If name$ <> ""
        Debug "name: " + name$
        SetWindowTitle(#Window_0, name$)
      EndIf
    EndIf

    scp\mWidth     = width
    scp\mHeight    = height
    scp\mTargetBuf = AllocateMemory(scp\mWidth * scp\mHeight * 4)

    Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

    If scp\mTargetBuf > 0

      If initCapture(deviceno, @scp)

        Debug "initCapture"

        Repeat

          t1 = timeGetTime_()

          If fps_timer < t1
            fps_res     = fps_counter
            fps_timer   = t1 + 1000
            fps_counter = 0
          Else
            fps_counter + 1
          EndIf

          doCapture(deviceno)

          ;While isCaptureDone(deviceno) = 0
          ;  If quit = 1
          ;    Break
          ;  EndIf
          ;  Delay(1)
          ;Wend

          If quit = 1
            Break
          EndIf

          If StartDrawing(ImageOutput(image))

            For y = 0 To scp\mHeight - 1
              For x = 0 To scp\mWidth - 1
                pixel = PeekL(scp\mTargetBuf + (y*scp\mWidth + x) * 4)
                rgb   = RGB((pixel >> 16) & $FF, (pixel >> 8) & $FF, pixel & $FF)
                ;rgb   = gray(rgb)
                Plot(x, y, rgb)
              Next
            Next

            If mx > -1 And my > -1
              Circle(mx, my, 10, RGB(255, 0, 0))
            EndIf

            DrawText(10, 10, "FPS: " + Str(fps_res), RGB(255, 0, 0))

            StopDrawing()

            SetGadgetState(#Image_0, ImageID(image))

          EndIf

          t2 = timeGetTime_()

          time = t2 - t1
         
          If time < delay
            Delay(delay - time)
          Else
            Delay(1)
          EndIf 

        Until quit = 1

        deinitCapture(deviceno)

        Debug "deinitCapture"

      EndIf

    EndIf

    If *namebuffer > 0
      FreeMemory(*namebuffer)
    EndIf

    If scp\mTargetBuf > 0
      FreeMemory(scp\mTargetBuf)
    EndIf

  EndIf

EndProcedure

Procedure capture02(temp.i)

  Protected width.l, height.l, image.i
  Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
  Protected scp.SimpleCapParams
  Protected y.i, x.i, pixel.i, rgb.i
  Protected depth.i, fps_soll.i, delay.i
  Protected t1.q, t2.q, time.q

  Static fps_counter.i, fps_timer.i, fps_res.i

  deviceno = 1

  width  = 320
  height = 240

  fps_soll = 30
  delay    = 1000 / fps_soll

  image = CreateImage(#PB_Any, width, height, 24)
  SetGadgetState(#Image_1, ImageID(image))

  depth = ImageDepth(image)
  Debug "depth: " + Str(depth)

  initCOM()

  count = countCaptureDevices()

  Debug "count: " + Str(count)

  If count > 1

    bufferlength = 1000
    *namebuffer  = AllocateMemory(bufferlength)

    If *namebuffer > 0
      getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
      name$ = PeekS(*namebuffer, -1, #PB_Ascii)
      If name$ <> ""
        Debug "name: " + name$
        name$ = GetWindowTitle(#Window_0) + " | " + name$
        SetWindowTitle(#Window_0, name$)
      EndIf
    EndIf

    scp\mWidth     = width
    scp\mHeight    = height
    scp\mTargetBuf = AllocateMemory(scp\mWidth * scp\mHeight * 4)

    Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

    If scp\mTargetBuf > 0

      If initCapture(deviceno, @scp)

        Debug "initCapture"

        Repeat

          t1 = timeGetTime_()

          If fps_timer < t1
            fps_res     = fps_counter
            fps_timer   = t1 + 1000
            fps_counter = 0
          Else
            fps_counter + 1
          EndIf

          doCapture(deviceno)

          ;While isCaptureDone(deviceno) = 0
          ;  If quit = 1
          ;    Break
          ;  EndIf
          ;  Delay(1)
          ;Wend

          If quit = 1
            Break
          EndIf

          If StartDrawing(ImageOutput(image))

            For y = 0 To scp\mHeight - 1
              For x = 0 To scp\mWidth - 1
                pixel = PeekL(scp\mTargetBuf + (y*scp\mWidth + x) * 4)
                rgb   = RGB((pixel >> 16) & $FF, (pixel >> 8) & $FF, pixel & $FF)
                ;rgb   = gray(rgb)
                Plot(x, y, rgb)
              Next
            Next

            If mx > -1 And my > -1
              Circle(mx - 320, my, 10, RGB(255, 0, 0))
            EndIf

            DrawText(10, 10, "FPS: " + Str(fps_res), RGB(255, 0, 0))

            StopDrawing()

            SetGadgetState(#Image_1, ImageID(image))

          EndIf

          t2 = timeGetTime_()

          time = t2 - t1

          If time < delay
            Delay(delay - time)
          Else
            Delay(1)
          EndIf 

        Until quit = 1

        deinitCapture(deviceno)

        Debug "deinitCapture"

      EndIf

    EndIf

    If *namebuffer > 0
      FreeMemory(*namebuffer)
    EndIf

    If scp\mTargetBuf > 0
      FreeMemory(scp\mTargetBuf)
    EndIf

  EndIf

EndProcedure

Procedure capture03(temp.i)

  Protected width.l, height.l, image.i
  Protected deviceno.l, count.l, *namebuffer.i, bufferlength.l, name$
  Protected scp.SimpleCapParams
  Protected y.i, x.i, pixel.i, rgb.i
  Protected depth.i, fps_soll.i, delay.i
  Protected t1.q, t2.q, time.q

  Static fps_counter.i, fps_timer.i, fps_res.i

  deviceno = 2

  width  = 320
  height = 240

  fps_soll = 30
  delay    = 1000 / fps_soll

  image = CreateImage(#PB_Any, width, height, 24)
  SetGadgetState(#Image_2, ImageID(image))

  depth = ImageDepth(image)
  Debug "depth: " + Str(depth)

  initCOM()

  count = countCaptureDevices()

  Debug "count: " + Str(count)

  If count > 2

    bufferlength = 1000
    *namebuffer  = AllocateMemory(bufferlength)

    If *namebuffer > 0
      getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
      name$ = PeekS(*namebuffer, -1, #PB_Ascii)
      If name$ <> ""
        Debug "name: " + name$
        name$ = GetWindowTitle(#Window_0) + " | " + name$
        SetWindowTitle(#Window_0, name$)
      EndIf
    EndIf

    scp\mWidth     = width
    scp\mHeight    = height
    scp\mTargetBuf = AllocateMemory(scp\mWidth * scp\mHeight * 4)

    Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

    If scp\mTargetBuf > 0

      If initCapture(deviceno, @scp)

        Debug "initCapture"

        Repeat

          t1 = timeGetTime_()

          If fps_timer < t1
            fps_res     = fps_counter
            fps_timer   = t1 + 1000
            fps_counter = 0
          Else
            fps_counter + 1
          EndIf

          doCapture(deviceno)

          ;While isCaptureDone(deviceno) = 0
          ;  If quit = 1
          ;    Break
          ;  EndIf
          ;  Delay(1)
          ;Wend

          If quit = 1
            Break
          EndIf

          If StartDrawing(ImageOutput(image))

            For y = 0 To scp\mHeight - 1
              For x = 0 To scp\mWidth - 1
                pixel = PeekL(scp\mTargetBuf + (y*scp\mWidth + x) * 4)
                rgb   = RGB((pixel >> 16) & $FF, (pixel >> 8) & $FF, pixel & $FF)
                ;rgb   = gray(rgb)
                Plot(x, y, rgb)
              Next
            Next

            If mx > -1 And my > -1
              Circle(mx, my - 240, 10, RGB(255, 0, 0))
            EndIf

            DrawText(10, 10, "FPS: " + Str(fps_res), RGB(255, 0, 0))

            StopDrawing()

            SetGadgetState(#Image_2, ImageID(image))

          EndIf

          t2 = timeGetTime_()

          time = t2 - t1

          If time < delay
            Delay(delay - time)
          Else
            Delay(1)
          EndIf 

        Until quit = 1

        deinitCapture(deviceno)

        Debug "deinitCapture"

      EndIf

    EndIf

    If *namebuffer > 0
      FreeMemory(*namebuffer)
    EndIf

    If scp\mTargetBuf > 0
      FreeMemory(scp\mTargetBuf)
    EndIf

  EndIf

EndProcedure

If OpenWindow_Window_0()

  StickyWindow(#Window_0, 1)

  capture01TH = CreateThread(@capture01(), 0)
  capture02TH = CreateThread(@capture02(), 0)
  capture03TH = CreateThread(@capture03(), 0)
 
  ;- Event loop
  Repeat

    Event       = WaitWindowEvent(100)
    EventGadget = EventGadget()
    EventType   = EventType()
    EventWindow = EventWindow()

    mx = WindowMouseX(#Window_0)
    my = WindowMouseY(#Window_0)

    Select Event

      Case #PB_Event_Gadget

        If EventGadget = #Image_0
        EndIf

      Case #PB_Event_CloseWindow

        quit = 1

    EndSelect

    q1 = IsThread(capture01TH)
    q2 = IsThread(capture02TH)
    q3 = IsThread(capture03TH)

  Until quit = 1 And q1 = 0 And q2 = 0 And q3 = 0

EndIf

escapiClose()

End


_________________
PB v5.72 x86/x64
Windows 10 Pro 64bit


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 67 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6, 7  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 37 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye