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:
CamGadget - Module (windows only)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: CamGadget - Module (windows only)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Re: CamGadget - Module (windows only)
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.
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 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: CamGadget - Module (windows only)
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.sharkpeter hat geschrieben:Die zweite Frage, gibt es eine dll, mit der man W(Lan) Kameras auslesen/streamen kann.
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)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- Falko
- Admin
- Beiträge: 3531
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0 - Kontaktdaten:
Re: CamGadget - Module (windows only)
Code: Alles auswählen
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
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
- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Re: CamGadget - Module (windows only)
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
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 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.
- sharkpeter
- Beiträge: 474
- Registriert: 29.08.2004 16:18
- Wohnort: Dresden
- Kontaktdaten:
Re: CamGadget - Module (windows only)
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
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 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64
Nichts wissen macht nichts, sich dumm stellen aber schon.
Nichts wissen macht nichts, sich dumm stellen aber schon.