Abrufen von Bildern von einer digitalen Spiegelreflexkamera (Nikon) über C # -Code

    Guten Tag.

    Ich stand vor der Aufgabe, in meinem c # -Programm Fotos von der Kamera aufzunehmen, und es war notwendig, dass der Benutzer einen Knopf im Programm drückte oder eine Art Programmereignis passierte, und wir rrrrraz und ein Bild von der Kamera in das Programm und dann irgendwie verarbeitet / gespeichert / gesendet hat generell etwas programmatisch damit gemacht.

    Wie sich herausstellte, verfügen Hersteller von digitalen Spiegelreflexkameras über ein spezielles SDK, mit dem Sie programmgesteuert auf diese Kamera zugreifen und sie verwalten können. Ich habe eine Nikon D5200-Kamera, obwohl ich für Sony und Canon anscheinend auch ein ähnliches SDK gesehen habe.

    Der Artikel soll über die Möglichkeiten sprechen und ein kurzes Beispiel zeigen. Wie Sie wissen, wenn Sie wissen, dass etwas getan werden kann, dann finden Sie heraus, wie es geht - ein paar Unsinn.

    Was brauchen wir also:

    Zunächst müssen Sie das SDK selbst von der Nikon-Website herunterladen: sdk.nikonimaging.com/apply

    Sie müssen sich registrieren und Nikons ehrenamtlicher Entwickler werden. Wenn Sie sich registrieren, müssen Sie das Postfach des Unternehmens verwenden, da öffentliche Postfächer dort nicht funktionieren . Dort sehen Sie eine Liste der unterstützten Kameras, billige Seifenschalen werden leider nicht unterstützt.

    Zweitens empfehle ich der Einfachheit halber die Verwendung des bereits geschriebenen NikonCSWrapper'om: sourceforge.net/p/nikoncswrapper/wiki/Home

    Erstellen Sie als Nächstes Ihr Projekt (in Visual Studio), verbinden Sie den Link mit dem Nikon-Wrapper und kopieren Sie die Dateien NkdPTP.dll und Type0009.md3 in das Verzeichnis mit den Binärdateien (hier können die Nummern je nach Kamera unterschiedlich sein) Heruntergeladenes SDK.

    Nun ein kleines Beispiel dafür , wie Bilder zu machen:

    zuerst die Gerätemanager bestimmt:

    NikonManager manager = new NikonManager("Type0009.md3");

    dann banden an die Manager - Prozessor - Geräte hinzufügen , ein Ereignis:

    manager.DeviceAdded += manager_DeviceAdded;

    in dem Handler - Code Ich habe hier einen Text: Hier halte ich einen Verweis auf das neue Gerät und bindet ein Handler Ready Ereignis , das ausgelöst wird , wenn Die Kamera nimmt Bilder auf, und das Ereignis wird ausgelöst, und wenn Sie befehlen, ein Bild aus dem Programm aufzunehmen, und wenn Sie die Taste an der Kamera selbst drücken.

    void manager_DeviceAdded(NikonManager sender, NikonDevice device)
    {
    _device = device;
    this.Text = _device.Name;
    _device.ImageReady += _device_ImageReady;
    }




    Mein Foto-Event-Handler sieht folgendermaßen aus: Hier erhalte ich nur Zugriff auf den Puffer, in dem sich das Foto befindet, und lade es über MemoryStream in Image hoch, das ich dann an die PictureBox sende, um es auf dem Formular anzuzeigen. Wie Sie wissen, können Sie mit Image im Allgemeinen alles machen, mein Code ist nur zum Beispiel. Um eine Kamera mit dem Programmcode aufzunehmen, müssen Sie die Capture () -Methode aufrufen: Wenn Sie das Programm beenden, müssen Sie den Geräte-Manager schließen. Andernfalls stellen Sie keine Verbindung her, bis Sie den Computer neu starten. Im Allgemeinen können Sie mit Ihrer Kamera über das SDK viele Dinge tun: Empfangen und Einstellen von (?) Kameraparametern, Aufnehmen von Bildern, Aufnehmen von Videos, automatisches und manuelles Fokussieren (über das Programm) und Empfangen von Live-Videos über den Sucher.

    void _device_ImageReady(NikonDevice sender, NikonImage image)
    {
    MemoryStream ms = new MemoryStream(image.Buffer);
    Image img = Image.FromStream(ms);
    ms.Close();
    pictureBox1.Image = img;
    }






    _device.Capture();



    manager.Shutdown();



    Das ist alles für mich, ich hoffe, diese Informationen sind für jemanden nützlich. Vielen Dank für Ihre Aufmerksamkeit.

    Jetzt auch beliebt: