Laden...

Nikon D5000 ans PC anbinden und Bilder auslesen ???

Erstellt von MafiaGmbH vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.007 Views
M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 11 Jahren
Nikon D5000 ans PC anbinden und Bilder auslesen ???

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)

B
357 Beiträge seit 2010
vor 11 Jahren

Wichtig wäre noch dein System. Registry-Keys darf nämlich nicht jeder Benutzer auslesen.

2.891 Beiträge seit 2004
vor 11 Jahren

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}";
}

M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 11 Jahren

@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?

2.891 Beiträge seit 2004
vor 11 Jahren

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.

M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 11 Jahren

@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 😉