Nikon SDK für Kamerasteuerung
Nikon SDK für Kamerasteuerung
Hi,
ich habe eine Nikon Spiegelreflexkamera.
Diese Kamera kann man mit der SDK von Nikon ansteuern.
Zur Steuerung z. B. gehören solche Sachen wie "Foto schießen"(vom PC aus) oder auslesen und schreiben von Einstellungen vom PC aus.
Naja, nun sitze ich hier und habe von meinem Vater den Tipp bekommen, einfach mal mit der COMate zu arbeiten. Leider ist mein Verständnis mit dem Ansprechen der DLL von Nikon sogut wie gleich NULL.
Vlt. kann mir hier ja jemand helfen, wie ich das Ding benutze.
Falls jemand die SDK laden möchte,
Nikon SDK
Zu der ich Hilfe brauche ist die SDK für die D60.
Vielen Dank schon einmal für Hilfe.[/url]
ich habe eine Nikon Spiegelreflexkamera.
Diese Kamera kann man mit der SDK von Nikon ansteuern.
Zur Steuerung z. B. gehören solche Sachen wie "Foto schießen"(vom PC aus) oder auslesen und schreiben von Einstellungen vom PC aus.
Naja, nun sitze ich hier und habe von meinem Vater den Tipp bekommen, einfach mal mit der COMate zu arbeiten. Leider ist mein Verständnis mit dem Ansprechen der DLL von Nikon sogut wie gleich NULL.
Vlt. kann mir hier ja jemand helfen, wie ich das Ding benutze.
Falls jemand die SDK laden möchte,
Nikon SDK
Zu der ich Hilfe brauche ist die SDK für die D60.
Vielen Dank schon einmal für Hilfe.[/url]
Mit freundlichen Grüßen,
chrizl
chrizl
Re: Nikon SDK für Kamerasteuerung
Hai chrizl,
gibt es in diesem SDK Code-Beispiele in VB6 oder VBS? Wenn ja, dann
kannst Du diese recht einfach in 'COMate-Code' konvertieren. Poste mal ein
(kleines) Beispiel. Dann können wir mal gemeinsam schauen, wie man die
Sachen umsetzen kann.
Grüße ... Kiffi
gibt es in diesem SDK Code-Beispiele in VB6 oder VBS? Wenn ja, dann
kannst Du diese recht einfach in 'COMate-Code' konvertieren. Poste mal ein
(kleines) Beispiel. Dann können wir mal gemeinsam schauen, wie man die
Sachen umsetzen kann.
Grüße ... Kiffi
a²+b²=mc²
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Also es gibt z. B. von diyphotobits.com ein freeware-Tool für sowas.
Auf dieser Seite gibt es ein Beispiel-Source, bzw. den Quellsource, ganz unten in der Mitte.
Naja, man braucht dafür zwar die Kamera, um das Script ausführen zu können, da das Script die Cam anspricht.
Funktion des Scriptes ist eigentlich nur, dass sobald man mit der Kamera im PC-Modus ein Bild macht, dass dieses ausgelesen wird und auf dem PC gespeichert wird.
Hier mal der Code aus dem "tethered2"-Source von DIYPhotoBits in der WSF-Datei. Die Dll heisst "wiaaut.dll" und befindet sich im dem Ordner aus dem Download.
Ein Beispiel in C++ geschrieben vom Nikon selber ist hier zu finden: http://www.chlu.de/purebasic/downloads/ ... Sample.rar .
Hoffe, du/ihr kannst/könnt da was mit anfangen.
Auf dieser Seite gibt es ein Beispiel-Source, bzw. den Quellsource, ganz unten in der Mitte.
Naja, man braucht dafür zwar die Kamera, um das Script ausführen zu können, da das Script die Cam anspricht.
Funktion des Scriptes ist eigentlich nur, dass sobald man mit der Kamera im PC-Modus ein Bild macht, dass dieses ausgelesen wird und auf dem PC gespeichert wird.
Hier mal der Code aus dem "tethered2"-Source von DIYPhotoBits in der WSF-Datei. Die Dll heisst "wiaaut.dll" und befindet sich im dem Ordner aus dem Download.
Code: Alles auswählen
<job>
<reference object="wia.DeviceManager" />
<object id="DevMan" progid="Wia.DeviceManager" />
<object id="dlg" progid="WIA.CommonDialog" />
<script language="VBScript">
' Tethered Shooting Script 2.0
' Copyright 2008 All Rights Reserved
' Use and distribution for non-commercial purposes permitted
' http://www.DiyPhotoBits.com
Option Explicit
dim foldername
Dim outputfolder
Dim dev 'As WIA.Device
Dim itm 'As WIA.Item
Dim img 'As WIA.ImageFile
Dim itemCount 'As Integer
Dim fnext 'As String
Dim fso
Dim fn, tempfn
dim WshShell
dim afile
dim colEnvVars
dim tempfolder
Set fso= CreateObject("Scripting.FileSystemObject")
foldername = "tethered"
outputfolder = "c:\"&foldername &"\" ' change this as required
If not fso.FolderExists(outputfolder) Then
fso.CreateFolder(outputfolder )
End If
If not fso.FolderExists(outputfolder & "temp\") Then
fso.CreateFolder(outputfolder & "temp\")
End If
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colEnvVars = WshShell.Environment("User")
tempfolder = WshShell.ExpandEnvironmentStrings("%TEMP%")
Set dev = dlg.ShowSelectDevice
Wscript.echo "Tethered Shooting Script 2.0"
Wscript.echo ""
Wscript.echo "Copyright 2008 All Rights Reserved"
Wscript.echo ""
Wscript.echo "Use and distribution for non-commercial purposes permitted"
Wscript.echo ""
Wscript.echo "http://www.DiyPhotoBits.com"
Wscript.echo ""
Wscript.echo "Images from " & dev.Properties("Description").Value & " will be saved to " & outputfolder
Wscript.echo "Press Ctrl-Break to exit"
itemCount = dev.Items.Count
Do While True
If dev.Items.Count > itemCount Then ' new item appeared
itemCount = itemCount + 1
Set img = dlg.ShowTransfer(dev.Items(itemCount))
fnext = img.FileExtension
If fnext = "" Then
fnext = "NEF"
End If
tempfn = outputfolder & "temp\" & dev.Items(itemCount).Properties("Item Name").Value & "." & fnext
fn =outputfolder & dev.Items(itemCount).Properties("Item Name").Value & "." & fnext
wscript.echo "Saving "&fn
img.SaveFile tempfn
img = null
Set aFile = fso.GetFile(tempfn )
aFile.Move fn
WScript.Sleep(500)
WshShell.AppActivate foldername
WScript.Sleep(500)
WshShell.SendKeys "{END}"
End If
WScript.Sleep(500)
Loop
</script>
</job>
Hoffe, du/ihr kannst/könnt da was mit anfangen.
Mit freundlichen Grüßen,
chrizl
chrizl
das SDK kann / möchte ich hier auf diesem Rechner nicht installieren.
Deshalb muss ich mich ein wenig blind durch den Code hangeln.
Als erstes muss geprüft werden, welche Objekte uns zur Verfügung
stehen. Ich denke, dass das zum einen der DeviceManager und zum
anderen der CommonDialog sind.
Um das herauszufinden, bitte mal nachfolgenden Code laufen lassen und
schauen, was der Debugger so herausgibt.
Grüße ... Kiffi
Deshalb muss ich mich ein wenig blind durch den Code hangeln.
Als erstes muss geprüft werden, welche Objekte uns zur Verfügung
stehen. Ich denke, dass das zum einen der DeviceManager und zum
anderen der CommonDialog sind.
Um das herauszufinden, bitte mal nachfolgenden Code laufen lassen und
schauen, was der Debugger so herausgibt.
Code: Alles auswählen
IncludePath #PB_Compiler_Home + "comate\" ; Pfad anpassen
XIncludeFile "comate.pbi"
IncludePath ""
Define WIA_DeviceManager.COMateObject
Define WIA_CommonDialog.COMateObject
WIA_DeviceManager = COMate_CreateObject("WIA.DeviceManager")
If WIA_DeviceManager
Debug "WIA_DeviceManager-Objekt wurde erfolgreich erstellt :-)"
WIA_DeviceManager\Release() ; Objekt wieder freigeben
Else
Debug "WIA_DeviceManager-Objekt konnte nicht erstellt werden."
Debug COMate_GetLastErrorDescription()
EndIf
WIA_CommonDialog = COMate_CreateObject("WIA.CommonDialog")
If WIA_CommonDialog
Debug "WIA_CommonDialog-Objekt wurde erfolgreich erstellt :-)"
WIA_CommonDialog\Release() ; Objekt wieder freigeben
Else
Debug "WIA_CommonDialog-Objekt konnte nicht erstellt werden."
Debug COMate_GetLastErrorDescription()
EndIf
Grüße ... Kiffi
a²+b²=mc²
Hey,
sorry das ich mich jetzt erst melde, aber hatte am Wochenende wenig Zeit.
So, dass du die SDK nicht installieren möchtest, ist nicht schlimm. Problem ist ja leider auch, dass man ohne die Cam auch nicht viel mit der SDK anfangen kann.
Also zu deinem Code erstmal die Ausgabe des Debuggers:
Also bekommt das Script keine gültige ID vom DeviceManager zurück, wenn ich das richtig verstanden habe oder?
sorry das ich mich jetzt erst melde, aber hatte am Wochenende wenig Zeit.
So, dass du die SDK nicht installieren möchtest, ist nicht schlimm. Problem ist ja leider auch, dass man ohne die Cam auch nicht viel mit der SDK anfangen kann.
Also zu deinem Code erstmal die Ausgabe des Debuggers:
Code: Alles auswählen
WIA_DeviceManager-Objekt konnte nicht erstellt werden.
Invalid progID/CLSID. Check your spelling of the programmatic identifier. Also check that the component / ActiveX control has been registered.
WIA_CommonDialog-Objekt konnte nicht erstellt werden.
Invalid progID/CLSID. Check your spelling of the programmatic identifier. Also check that the component / ActiveX control has been registered.
Mit freundlichen Grüßen,
chrizl
chrizl
nun gibt es eigentlich nur eine Möglichkeit:chrizl hat geschrieben:Code: Alles auswählen
Invalid progID/CLSID. Check your spelling of the programmatic identifier. Also check that the component / ActiveX control has been registered.
Die erforderlichen DLL(s) sind nicht korrekt in Deinem System registriert
worden. Ich weiss leider nicht, um welche DLL(s) es sich hierbei handelt,
aber such einfach mal im SDK-Ordner nach *.DLL
Die dann gefundenen DLLs übergibst Du als Parameter der regsvr32.exe
In der Kommandozeilenumgebung:
Code: Alles auswählen
regsvr32 [PfadUndNameDeinerDll]
eingetragen werden.
sowas sollte dann ausgegeben werden:
Code: Alles auswählen
---------------------------
RegSvr32
---------------------------
DllRegisterServer in [Deine DLL] erfolgreich durchgeführt.
---------------------------
OK
---------------------------
SDK-Ordner befinen, die nicht registriert werden können. In diesem Fall
die Fehlermeldung einfach ignorieren. Wichtig ist, dass zumindest einmal
die Erfolgsmeldung kommen sollte.)
Wenn Du das gemacht hast, dann bitte nochmal meinen PB-Code
ausführen.
Grüße ... Kiffi
a²+b²=mc²
Ah, das sieht doch schon viel besser aus.
Nun werden beide Objekte erfolgreich erstellt.
Oh man, ich glaube, ich muss noch so einiges dazu lernen.
Achja, die DLL, die ich registriert habe ist jetzt erstmal die wiaaut.dll. Also nicht die DLL von der SDK von Nikon.
Bzw. diese lässt sich auch nicht registrieren, weil die keinen "DLL-Eingangspunkt" hat.
Nun werden beide Objekte erfolgreich erstellt.
Oh man, ich glaube, ich muss noch so einiges dazu lernen.
Achja, die DLL, die ich registriert habe ist jetzt erstmal die wiaaut.dll. Also nicht die DLL von der SDK von Nikon.
Bzw. diese lässt sich auch nicht registrieren, weil die keinen "DLL-Eingangspunkt" hat.
Mit freundlichen Grüßen,
chrizl
chrizl
prima! Das sind schon mal die besten Voraussetzungen, dass der Restchrizl hat geschrieben:Nun werden beide Objekte erfolgreich erstellt.
auch laufen wird.

Probier mal, ob das nachfolgende Schnippselchen bei Dir was ausspuckt:
Code: Alles auswählen
Define WIA_DeviceManager.COMateObject
Define WIA_CommonDialog.COMateObject
WIA_DeviceManager = COMate_CreateObject("WIA.DeviceManager")
If WIA_DeviceManager
Debug "WIA_DeviceManager-Objekt wurde erfolgreich erstellt :-)"
Else
Debug "WIA_DeviceManager-Objekt konnte nicht erstellt werden."
Debug COMate_GetLastErrorDescription()
End
EndIf
WIA_CommonDialog = COMate_CreateObject("WIA.CommonDialog")
If WIA_CommonDialog
Debug "WIA_CommonDialog-Objekt wurde erfolgreich erstellt :-)"
Else
Debug "WIA_CommonDialog-Objekt konnte nicht erstellt werden."
Debug COMate_GetLastErrorDescription()
WIA_DeviceManager\Release() ; Objekt wieder freigeben
End
EndIf
Define dev.COMateObject
dev = WIA_CommonDialog\getObjectProperty("ShowSelectDevice")
If dev
Debug "Selected device: " + dev\GetStringProperty("Properties('Description')\Value")
itemCount = dev\GetIntegerProperty("Items\Count")
Debug "Items: " + Str(itemCount)
dev\Release() ; Objekt freigeben
Else
Debug COMate_GetLastErrorDescription()
EndIf
WIA_CommonDialog\Release() ; Objekt freigeben
WIA_DeviceManager\Release() ; Objekt freigeben
a²+b²=mc²
Perfecto.
Genauso muss das Ding laufen.
Kiffi, du bist ein Schatz.
Jetzt weiss ich auf jeden Fall, wie ich COMate einsetzen muss, ich bin da vorher nicht so wirklich durchgestiegen.
Danke schön
Achja, dein Code zeigt mir nun an, dass beide Objekte erstellt wurden und anschließend, dass die D60 ausgewählt wurde.
Als letztes kommt dann noch die Anzahl der Bilder.
Genauso muss das Ding laufen.
Kiffi, du bist ein Schatz.
Jetzt weiss ich auf jeden Fall, wie ich COMate einsetzen muss, ich bin da vorher nicht so wirklich durchgestiegen.
Danke schön

Achja, dein Code zeigt mir nun an, dass beide Objekte erstellt wurden und anschließend, dass die D60 ausgewählt wurde.
Als letztes kommt dann noch die Anzahl der Bilder.
Mit freundlichen Grüßen,
chrizl
chrizl