Hallo,
ich möchte gerne die Nikon D5000 so einsetzen das ich vom PC den Auslöser betätigen kann und dass entstandene Bild aus der Kamera von der SD auslese.
Nun habe ich das auslösen der Kamera dank durch folgenden Beitrag gelöst:
Catch a Snapshot via your webcam using C#: Part VII
Da wird aber auch beschrieben wie man an das Bild ran kommt:
Stelle:
/* As the image is of jpg format then you try to get the value of the representative GUID */
RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"CLSID\{D2923B86-15F1-46FF-A19A-DE825F919576}\SupportedExtension\.jpg");
jpegGUID = key.GetValue("FormatGUID").ToString();
Leider habe ich die Variable key immer = null und er bricht dann in der Zweiten Stelle ab, so das ich keine Möglichkeit habe die Bilder auszulesen.
Ich vermute das der Wert:
...@"CLSID{D2923B86-15F1-46FF-A19A-DE825F919576}\SupportedExtension.jpg"...
bei mir anders aussehen müsste, aber wie baue ich es richtig zusammen?
Könnt ihr mir bitte helfen?
Folgende Angaben Sind vermutlich noch wichtig:
Visualstudio 2008
Nikon D5000 -> die Fotos werden auf die SD Karte gespeichert.
Die Kamera hängt am USB Kabel
An die SD Karte kann ich per Windows unter Computer->Tragbare Geräte zugreifen, hat aber kein Laufwerksbuchstaben (also geht nicht mit File auszulesen)
Wichtig wäre noch dein System. Registry-Keys darf nämlich nicht jeder Benutzer auslesen.
Wie es aussieht, arbeitest du mit WIA. Da brauchst du die Format-GUID nicht extra auslesen - die gibt es schon fertig definiert (in der Interop.WIA.dll). Du kannst direkt WIA.FormatID.wiaFormatJPEG
verwenden.
public abstract class FormatID
{
public const string wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";
public const string wiaFormatGIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}";
public const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
public const string wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
public const string wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}";
}
@dN!3L Danke für die Info, ich werde dies dann Probieren.
aber schaue mal unter dem Link den ich gepostet habe.
Da wird der String wie Folgt aufgebaut:
@"CLSID{D2923B86-15F1-46FF-A19A-DE825F919576}\SupportedExtension.jpg"
Die Frage ist nur, würde es jetzt ausreichen wen ich den GUID also "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" für JPEG gegen den aus dem String austausche, oder muss ich den komischen Pfad noch bearbeiten, und wen Ja wie würde es denn aussehen, vielleicht habt ihr einen weiteren Beispiel damit ich den unterschied sehe?
Hm, nochmal: Du kannst dir das Rumgesuche in der Registry komplett sparen. Das ist im verlinkten Beitrag nur dazu da, um an den Wert jpegGUID
zu kommen (um ihn dann in oItem.Transfer(jpegGUID)
zu verwenden).
Also vergiss das ganze Registry-Gefummele aus dem verlinkten Beitrag. Du kannst einfach oItem.Transfer(WIA.FormatID.wiaFormatJPEG)
benutzen.
@dN!3L Super, vielen dank, hat es mir geholfen.
Wobei ich da auch noch kleine Erweiterung schreiben musste, liegt wahrscheinlich daran das ich keine WebCam sondern Kamera verwende.
Wen diese Lösung auch interessiert, dann kann er einfach die folgende Funktion in der WebCam Klasse aus dem Link den ich gepostet habe ersetzen:
public void SnapShot()
{
try
{
oItem = oDevice.ExecuteCommand(CommandID.wiaCommandTakePicture);
ImageFile imgFile = null;
if (oItem == null)
{
oItem = oDevice.Items[oDevice.Items.Count];
}
imgFile = oItem.Transfer(WIA.FormatID.wiaFormatJPEG) as WIA.ImageFile;
SaveImageAs();
imgFile.SaveFile(path);
oItem = null;
}
catch (Exception caught)
{
MessageBox.Show("Put another image");
}
}
Wobei ist vermutlich immer noch nicht optimal, sollte für Tüftler aber kein Problem sein 😉