Maison >développement back-end >Tutoriel C#.Net >Conseils .Net pour jouer au SLR

Conseils .Net pour jouer au SLR

高洛峰
高洛峰original
2017-03-12 14:04:031310parcourir

Cet article partage l'utilisation de .Net pour jouer au SLR

Contexte

Je n'ai pas visité le jardin depuis plus d'un an, j'ai changé de secteur d'activité. et je sentais que j'étais trop occupé Oui, mais c'est aussi gratifiant d'être exposé à différentes cultures de R&D, comme le flux technique dans le cercle des jeux, le flux commercial dans le cercle du commerce électronique, le flux artistique dans les médias. cercle, etc.

L'arrière-plan de cette application est d'automatiser les appareils photo reflex. Le patron veut faire de la programmation pour l'interface USB, mais c'est une technologie de trop bas niveau pour être utilisée. 🎜 >c# n'est pas très approprié à faire. Après avoir marchandé un moment, faisons-le pour le SLR.

Supposons un scénario dans lequel nous avons besoin d'appareils N SLR pour viser une fleur, prendre une photo toutes les 30 secondes et la publier automatiquement sur Weibo.

Points techniques

SDK Canon

Norme WIA

SDK Canon fournit dll NET aux développeurs. a indiqué que les modèles d'appareils photo correspondants de Canon sont facilement accessibles en appelant le SDK, mais que la version .NET du SDK ne donne pas accès aux données de l'appareil photo. Alors, comment obtenir les données dans l’appareil photo reflex devient un problème. Certains étudiants peuvent être confus. Si l'appareil photo reflex est connecté au port USB de l'ordinateur, une lettre de lecteur sera générée. Ne suffit-il pas d'utiliser directement DriveInfo.GetDrives() pour obtenir la traversée de la lettre de lecteur ? Laissez-moi d'abord vous renseigner. La classification des périphériques USB esclaves peut être obtenue à partir de l'octet bInterfaceClass correspondant au descripteur d'interface du périphérique USB. Les codes typiques pour bInterfaceClass sont 1, 2, 3, 6, 7, 8, 9, 10, 11, 255. Les significations respectives sont 1-audio : indiquant un appareil audio. 2-appareil de communication : équipement de communication, tel que téléphone, modem, etc. 3-HID : dispositif d'interaction homme-machine, tel qu'un clavier, une souris, etc. Équipements d'imagerie à 6 images, tels que scanners, appareils photo, etc. Parfois, les appareils photo numériques peuvent également être classés dans cette catégorie. 7-Classe d'imprimante. Comme les imprimantes unidirectionnelles, bidirectionnelles, etc. Classe de stockage de masse à 8 stockages de masse. Tout ce qui possède certaines capacités de stockage peut être classé dans cette catégorie. Par exemple, la plupart des appareils photo numériques entrent dans cette catégorie. Classe à 9 hubs. Carte à 11 puces/carte à puce. Classe personnalisée du fabricant 255, principalement utilisée pour certains équipements spéciaux. Tels que la carte adaptateur d'interface, etc.

Les types de périphériques que notre driveinfo peut capturer sont


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,
    }


Généralement, les périphériques de disque USB sont amovibles, mais l'appareil photo reflex est un PortableDevice et ce type ne peut pas être obtenu à l'aide de la méthode GetDrives. Windows Systems32 propose une série de méthodes api pour les appareils portables. Les étudiants intéressés peuvent essayer

.Net 玩单反的技巧

Ici, je choisis la programmation d'interface wia. WIA est l'abréviation de Windows. Acquisition d'images. La version actuellement disponible est WIA 1.0, qui est un service d'acquisition d'images numériques fourni dans Windows Millennium Edition (Windows Me) ou les versions supérieures des systèmes Windows. Il peut également être utilisé pour gérer les équipements d'imagerie numérique. . WIA est un composant COM implémenté à l'aide de services hors processus, WIA évite la perte de performances lors du transfert de données d'image en fournissant son propre mécanisme de transfert de données (interface IWiaDataTransfer). L'interface IWiaDataTransfer hautes performances utilise la mémoire partagée pour transférer des données vers les programmes clients.
WIA comporte trois composants principaux : Device Manager, Minidriver Service Library et Device Minidriver.
◆Gestionnaire de périphériques : énumérer les périphériques d'image, obtenir les attributs des périphériques, créer des événements pour les périphériques et créer des objets de périphériques
◆Bibliothèque de services Minidriver : exécuter toutes les fonctions indépendantes du périphérique ; Service ;
◆Mappage d'explications du minipilote de périphérique : WIA attributs et commandes vers un périphérique spécifique.
Grâce aux informations de DeviceManagerClass().DeviceInfos, nous pouvons collecter les informations sur l'appareil appartenant à CameraDeviceType dans le SLR. Quant à la Vidéo et d'autres types, il existe d'autres méthodes similaires. .


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


Parlons du SDK La version Canon sdk .net propose 5 types de délégation de handles


        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);


Le premier est utilisé pour le traitement des données tel que la copie de données, la sauvegarde d'images, etc.

Deuxièmement pour PC pour découvrir de nouveaux appareils photo

Le troisième est utilisé pour les notifications de changements dans l'état d'attributs tels que les flux de données dans l'appareil photo, comme une série de changements provoqués par la prise de photos

Le quatrième est utilisé pour les opérations sur les fichiers telles que comme la création, la suppression de fichiers, etc.

Le cinquième est utilisé pour l'heure d'état de la caméra elle-même, comme une mise sous et hors tension anormale, etc.

Veuillez vous référer au programme de démonstration pour divers scénarios d'application. Bien que la méthode de chargement active le multithread, l'E/S du disque dur lui-même est en série. Voici juste cela dit que vous n'avez pas besoin de le prendre au sérieux lorsque vous jouez au

Rendu<.>

Équipement photo nouvellement ajouté

.Net 玩单反的技巧

Caméra contrôlée par programme pour prendre des photos

.Net 玩单反的技巧

Charger dans -données photo de la caméra

.Net 玩单反的技巧


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn