Aktuelle Zeit: 05.06.2020 20:14

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 07.10.2013 17:49 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Ist natürlich ärgerlich, wenn das ganze nicht so zuverlässig funktioniert. Aber über ähnliche Problem wurde ja auch im engl.
Forum geschrieben.

Hier mal ein Screenshot, wie es aussehen könnte:
Bild

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 08.02.2020 11:33 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
Hallo Thomas, hallo zusammen
nach langer Zeit hole ich den hier mal wieder aus der Versenkung. Vielleicht kannst du mir weiterhelfen.

Und zwar die erste Frage: gibt es eine Möglichkeit, den Requester für die Kameraauswahl zu überspringen
und eine Kamera direkt zuzuweisen? Wäre toll wenn du da eine Idee hättest.

Die zweite Frage, gibt es eine dll, mit der man W(Lan) Kameras auslesen/streamen kann.

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 08.02.2020 22:10 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
sharkpeter hat geschrieben:
Die zweite Frage, gibt es eine dll, mit der man W(Lan) Kameras auslesen/streamen kann.

Ich hatte mal so etwas in der Art für eine Applikation benötigt, in der bei den Usern ein kleines Window mit dem Kamerabild der Türkamera aufpoppen sollte, sobald jemand an der Türe geklingelt hat.

Die meisten WebCam bieten eine Webseite mit dem LiveStream an, so auch die von uns eingesetzte.
Diesen LiveStream hab ich dann über ein gecliptes Webgadget in dem PopUp-Window ausgegeben.

Einige WebCams bieten auch direkt Links zu Live-Einzelbildern an - kommt aber ein bisserl auf das Model an.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 09.02.2020 00:35 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
Code:
DeclareModule CamGadget
  Interface ICamGadget
    Free()
    Resize(x, y, width, height)
    GetcaphWnd()
    DlgSettings()
    SnapImage()
    DriverConnect(DriveIndex)
  EndInterface
 
  Declare New(x, y, width, height, rate.l = 30, Text.s = "My Capture Window")
EndDeclareModule

Module CamGadget
  EnableExplicit
 
  Structure Class
    *vTable
    ID.i
    hWndC.i
  EndStructure
   
  Define DLL

  Prototype capCreateCaptureWindow(lpszWindowName.p-Unicode, dwStyle.l, x.l, y.l, nWith.l, nHeigth.l, hWnd.i, nID.l)
 
  Global capCreateCaptureWindow.capCreateCaptureWindow
 
  DLL = OpenLibrary(#PB_Any, "avicap32.dll")
 
  If DLL
    capCreateCaptureWindow =  GetFunction(DLL, "capCreateCaptureWindowW")
  EndIf
 
  Procedure New(x, y, width, height, rate.l = 30, Text.s = "My Capture Window")
    Protected *obj.Class
   
    *obj = AllocateMemory(SizeOf(Class))
    If *obj
      With *obj
        \vTable = ?vTable
        \ID = ContainerGadget(#PB_Any, x, y, width, height)
        CloseGadgetList()
        HideGadget(\ID, #True)
        \hWndC = capCreateCaptureWindow(Text,  #WS_CHILD | #WS_VISIBLE, 0, 0, width, height, GadgetID(\ID), \ID)
        If \hWndC
          SendMessage_(\hWndC, #WM_CAP_DRIVER_CONNECT, 0, 0)
          SendMessage_(\hWndC, #WM_CAP_SET_PREVIEWRATE, rate, 0)
          SendMessage_(\hWndC, #WM_CAP_SET_PREVIEW, #True, 0)
          SendMessage_(\hWndC, #WM_CAP_SET_SCALE, #True, 0)
          HideGadget(\ID, #False)
         
          ProcedureReturn *obj
        Else
          FreeGadget(\ID)
          FreeMemory(*obj)
         
          ProcedureReturn #False
        EndIf
      EndWith
    EndIf
  EndProcedure
   
  Procedure Free(*obj.Class)
      If *obj
        With *obj
          SendMessage_(\hWndC, #WM_CAP_STOP, 0, 0)
          SendMessage_(\hWndC, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
          DestroyWindow_(\hWndC)
          FreeGadget(\ID)
        EndWith
        FreeMemory(*obj)
      EndIf
  EndProcedure

  Procedure Resize(*obj.Class, x, y, width, height)
    If *obj
      With *obj
        ResizeGadget(\ID, x, y, width, height)
        MoveWindow_(\hWndC, 0, 0, width, height, #True)
      EndWith
    EndIf
  EndProcedure
   Procedure GetcaphWnd(*obj.Class)
    If *obj
      ProcedureReturn *obj\hWndC
    EndIf
  EndProcedure
 
  Procedure DriverConnect(*obj.Class, hWndC, DriveIndex.l);(Geräteindex 0-9)
    If *obj
      SendMessage_(*obj\hWndC, #WM_CAP_DRIVER_CONNECT, hWndC, DriveIndex)
    EndIf
  EndProcedure
 
  Procedure DlgSettings(*obj.Class)
    If *obj
      SendMessage_(*obj\hWndC, #WM_CAP_DLG_VIDEOSOURCE, 0, 0)
    EndIf
  EndProcedure
 
  Procedure SnapImage(*obj.Class)
    If *obj
      SendMessage_(*obj\hWndC, #WM_CAP_EDIT_COPY, 0, 0)
      ProcedureReturn GetClipboardImage(#PB_Any, 32)
    EndIf
  EndProcedure
 
  DataSection
    vTable:
    Data.i @Free()
    Data.i @Resize()
    Data.i @GetcaphWnd()
    Data.i @DlgSettings()
    Data.i @SnapImage()
    Data.i @DriverConnect()
  EndDataSection
EndModule

CompilerIf #PB_Compiler_IsMainFile
  EnableExplicit
 
  Enumeration
    #btnSettings
    #btnSnap
    #imgSnap
  EndEnumeration
 
  Define myCam.CamGadget::ICamGadget
  Define img
   
  OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 410, "Webcam Example", #PB_Window_SizeGadget | #PB_Window_SystemMenu)
  myCam = CamGadget::New(10, 10, 640, 360)
 
  ButtonGadget(#btnSettings, 10, 380, 80, 20, "Settings")
  ButtonGadget(#btnSnap, 100, 380, 80, 20, "Snapshot")
  ImageGadget(#imgSnap, WindowWidth(0) - 105, 10, 100, 100, 0, #PB_Image_Border)
  myCam\DriverConnect(0);https://docs.microsoft.com/en-us/windows/win32/api/vfw/nf-vfw-capdriverconnect
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        myCam\Free()
        Break
     
      Case #PB_Event_SizeWindow
        myCam\Resize(#PB_Ignore, #PB_Ignore, WindowWidth(0) - 120, WindowHeight(0) - 50)
        ResizeGadget(#btnSettings, #PB_Ignore, WindowHeight(0) - 30, #PB_Ignore, #PB_Ignore)
        ResizeGadget(#btnSnap, #PB_Ignore, WindowHeight(0) - 30, #PB_Ignore, #PB_Ignore)
        ResizeGadget(#imgSnap, WindowWidth(0) - 105, #PB_Ignore, #PB_Ignore, #PB_Ignore)
       
      Case #PB_Event_Gadget
       
        Select EventGadget()
          Case #btnSettings
           myCam\DlgSettings()
           
          Case #btnSnap
            img = myCam\SnapImage()
            ResizeImage(img, 100, 100)
            SetGadgetState(#imgSnap, ImageID(img))
           
        EndSelect
    EndSelect
  ForEver
CompilerEndIf


Hallo Jens,
ungefähr so müsste es gehen. Ich habe vor der Repeatschleife das Gerät bei mir auf Index 0 voreingestellt (myCam\DriverConnect(0) ).
Du könntest weiter in der Repeatschleife eine Abfrage auf das Dir bekannte Gerät umstellen.
leider kann ich das selbst nicht testen, a ich das nur mit meiner Kamera am Laptop getestet habe.
Der Geräteindex kann also nur von 0 bis 9 eingestellt werden.

LG, Falko

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 09.02.2020 13:00 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
Hallo PureLust,
der Gedanke daran ist, alle Kamera-Screens in einem Programmfenster zu haben. Die Sache mit den Einzelbildern wäre dabei ausreichend,
sprich ich brauche keinen Live-Stream, sondern nur "getaktet" immer wieder ein Bild. Wenn man bei den zur Kamera angebotenen App´s
ohne Ansehen "jede" Kamera ansprechen könnte, wäre das auch praktikabel. Nur leider geht immer nur "die eigene" ...

Moin Falko,
das teste ich mal durch, danke einstweilen. Der Rest steht in der PN von eben :)

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CamGadget - Module (windows only)
BeitragVerfasst: 09.02.2020 18:59 
Offline
Benutzeravatar

Registriert: 29.08.2004 16:18
Wohnort: Dresden
Hallo Falko,
das habe ich schon in der Procedure "NEW" probiert, ohne Erfolg. Der Requester wird zwar mit einer ID verlassen, aber der
Inhalt ist leer (schwarz). Übrigens ist ein Tippfehler drin: EndSelectä vierte Zeile von unten :)

Vielleicht ist ja auch eine andere dll erforderlich. Programme die das können gibt es freilich, aber ab mehr als zwei Kameras
wollen die echt Kohle dafür haben und das sehe ich nicht ein :)

_________________
PB3.94 bis 5.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.

Portal / Mallorca


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 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:  

 


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