Heim  >  Artikel  >  Backend-Entwicklung  >  .Net-Tipps zum Spielen von SLR

.Net-Tipps zum Spielen von SLR

高洛峰
高洛峰Original
2017-03-12 14:04:031248Durchsuche

Dieser Artikel beschreibt die Verwendung von .Net zum Spielen von Spiegelreflexkameras

Hintergrund

Ich habe den Garten seit mehr als einem Jahr nicht mehr besucht und meine Branche gewechselt Ja, aber es ist auch lohnend, mit verschiedenen F&E-Kulturen in Kontakt zu kommen, wie zum Beispiel dem technischen Fluss im Gaming-Kreis, dem Geschäftsfluss im E-Commerce-Kreis, dem künstlerischen Fluss in den Medien Kreis usw.

Der Hintergrund dieser Anwendung ist die Automatisierung von Spiegelreflexkameras. Der Chef möchte die Programmierung für die USBSchnittstelle durchführen, aber es handelt sich um eine zu einfache Technologie, um sie zu verwendenc# ist dafür nicht sehr geeignet. Nachdem wir eine Weile gefeilscht haben, lasst es uns für die Spiegelreflexkamera tun.

Angenommen, wir benötigen N-Spiegelreflexgeräte, um auf eine Blume zu zielen, alle 30 Sekunden ein Foto aufzunehmen und es automatisch auf Weibo zu veröffentlichen.

Technische Punkte

Canon SDK

WIA-Standard

Canon SDK stellt dll NET-Entwicklern zur Verfügung zitiert, dass auf die entsprechenden Kameramodelle von Canon durch Aufrufen des SDK leicht zugegriffen werden kann, die .NET-Version des SDK jedoch keinen Zugriff auf die Daten in der Kamera bietet. Daher wird es zum Problem, die Daten in der Spiegelreflexkamera zu erhalten. Einige Schüler sind möglicherweise verwirrt. Wenn die Spiegelreflexkamera an den USB-Anschluss des Computers angeschlossen ist, wird ein Laufwerksbuchstabe generiert. Kann es nicht ausreichen, DriveInfo.GetDrives () direkt zu verwenden, um den Laufwerksbuchstabendurchlauf zu erhalten? Lassen Sie mich Sie zunächst informieren. Die Klassifizierung von USB-Slave-Geräten kann aus dem bInterfaceClass-Byte abgerufen werden, das dem USB-Geräteschnittstellendeskriptor entspricht. Typische Codes für bInterfaceClass sind 1, 2, 3, 6, 7, 8, 9, 10, 11, 255. Die jeweiligen Bedeutungen sind 1-Audio: Zeigt ein Audio-Gerät an. 2-Kommunikationsgerät: Kommunikationsgeräte wie Telefon, Moden usw. 3-HID: Mensch-Computer-Interaktionsgerät wie Tastatur, Maus usw. 6-Bild-Bildgebungsgeräte wie Scanner, Kameras usw. Manchmal können auch Digitalkameras in diese Kategorie eingeordnet werden. 7-Drucker-Klasse. Wie Einweg-, Zwei-Wege-Drucker usw. 8-Massenspeicher-Massenspeicherklasse. Alles, was über bestimmte Speicherkapazitäten verfügt, kann in diese Kategorie eingeordnet werden. Beispielsweise fallen die meisten Digitalkameras in diese Kategorie. 9-Hub-Klasse. 11-Chipkarte/Smartcard. 255 – herstellerspezifisch. Benutzerdefinierte Klasse, die hauptsächlich für einige Spezialgeräte verwendet wird. Wie Schnittstellenadapterkarte usw.

Die Gerätetypen, die unsere Laufwerksinfo erfassen kann, sind


public enum DriveType
    {
        // Summary:
        //     The type of drive is unknown.
        Unknown = 0,
        //
        // Summary:
        //     The drive does not have a root directory.
        NoRootDirectory = 1,
        //
        // Summary:
        //     The drive is a removable storage device, such as a floppy disk drive or a
        //     USB flash drive.
        Removable = 2,
        //
        // Summary:
        //     The drive is a fixed disk.
        Fixed = 3,
        //
        // Summary:
        //     The drive is a network drive.
        Network = 4,
        //
        // Summary:
        //     The drive is an optical disc device, such as a CD or DVD-ROM.
        CDRom = 5,
        //
        // Summary:
        //     The drive is a RAM disk.
        Ram = 6,
    }


Im Allgemeinen sind USB-Festplattengeräte entfernbar. Die Spiegelreflexkamera ist jedoch ein tragbares Gerät und dieser Typ kann nicht mit der GetDrives-Methode abgerufen werden. Windows Systems32 bietet eine Reihe von API-Methoden für tragbare Geräte

.Net 玩单反的技巧

Hier wähle ich WIA, die Abkürzung für Windows Die derzeit verfügbare Version ist WIA 1.0, ein digitaler Bilderfassungsdienst , der in Windows Millennium Edition (Windows Me) oder höheren Versionen von Windows-Systemen bereitgestellt wird. Er kann auch zur Verwaltung digitaler Bilderfassungsgeräte verwendet werden . WIA ist eine COM-Komponente, die mithilfe von Out-of-Process-Diensten implementiert wird. WIA vermeidet Leistungseinbußen während der Bilddatenübertragung, indem es einen eigenen Datenübertragungsmechanismus bereitstellt (IWiaDataTransfer-Schnittstelle). Die leistungsstarke IWiaDataTransfer-Schnittstelle nutzt Shared Memory, um Daten an Client-Programme zu übertragen. WIA besteht aus drei Hauptkomponenten: Geräte-Manager, Minidriver-Dienstbibliothek und Geräte-Minidriver.
◆Geräte-Manager: Bildgeräte aufzählen, Geräteattribute abrufen,
Ereignisse für Geräte erstellen und Geräte-Objekte erstellen; ◆Minidriver-Dienstbibliothek: alle geräteunabhängigen Funktionen ausführen Dienst;
◆Device Minidriver Explanation Mapping: WIA
Attribute und Befehle zu einem bestimmten Gerät. Über die Informationen in DeviceManagerClass().DeviceInfos können wir die
Geräteinformationen sammeln, die zu CameraDeviceType in der Spiegelreflexkamera gehören. Für Video und andere Typen gibt es andere ähnliche Methoden .


        public void DownJpgFromAllCamera()
        {
            int i = 1;
            foreach (IDeviceInfo DevInfo in new DeviceManagerClass().DeviceInfos)
            {
                if (DevInfo.Type == WiaDeviceType.CameraDeviceType)
                {
                    string DeviceID = DevInfo.DeviceID;
                    Device wDevice = DevInfo.Connect();
                    Devparam dev = new Devparam {wiaDevice=wDevice, DeviceID = DeviceID, index = i };
                    new Thread((Camera) => 
                        {
                            DownJpg(((Devparam)Camera).wiaDevice, ((Devparam)Camera).DeviceID, ((Devparam)Camera).index);
                        }
                        ).Start(dev);
                 
                  
                    i++;
                }
            }
        }


Sprechen wir über das SDK.net-Version bietet 5 Arten der Handle-Delegierung


        public delegate uint EdsProgressCallback( uint inPercent, IntPtr inContext, ref bool outCancel);
        public delegate uint EdsCameraAddedHandler(IntPtr inContext);
        public delegate uint EdsPropertyEventHandler(uint inEvent, uint inPropertyId, uint inParam, IntPtr inContext); 
        public delegate uint EdsObjectEventHandler( uint inEvent, IntPtr inRef, IntPtr inContext); 
        public delegate uint EdsStateEventHandler( uint inEvent, uint inParameter, IntPtr inContext);


Der erste wird für die Datenverarbeitung wie Datenkopieren, Bildspeichern usw. verwendet.

Sekunden für den PC, um neue Kamerageräte zu entdecken

Der dritte wird für Benachrichtigungen über Änderungen im Status von Attributen wie Datenströmen in der Kamera verwendet, beispielsweise eine Reihe von Änderungen, die durch das Aufnehmen von Bildern verursacht werden.

Der vierte wird für Dateivorgänge verwendet, z B. Dateierstellung, Löschung usw.

Die fünfte wird für die Statuszeit der Kamera selbst verwendet, z. B. abnormales Ein- und Ausschalten usw.

Bitte beachten Sie dazu das Demoprogramm Verschiedene Anwendungsszenarien. Obwohl die Lademethode Multithreading aktiviert, ist die Festplatten-E/A selbst nur seriell. Es heißt, dass Sie es beim Spielen nicht ernst nehmen müssen

Rendering

Neu hinzugefügte Kameraausrüstung

.Net 玩单反的技巧

Programmgesteuerte Kamera zum Aufnehmen von Bildern

.Net 玩单反的技巧

Einladen -Kamerafotodaten

.Net 玩单反的技巧


Das obige ist der detaillierte Inhalt von.Net-Tipps zum Spielen von SLR. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn