>  기사  >  백엔드 개발  >  SLR 재생을 위한 .Net 팁

SLR 재생을 위한 .Net 팁

高洛峰
高洛峰원래의
2017-03-12 14:04:031295검색

이 기사에서는 .Net을 사용하여 DSLR을 재생하는 방법을 공유합니다.

배경

1년 넘게 정원을 방문하지 않았습니다. 업종을 바꿨습니다. 네, 하지만 게임계의 기술적 흐름, 전자상거래계의 비즈니스 흐름, 산업계의 예술적 흐름과 같은 다양한 R&D 문화를 접할 수 있어서 조금 보람을 느꼈습니다. 미디어 서클 등

이 애플리케이션의 배경은 SLR 카메라를 자동화하는 것입니다. 사장님께서 USB인터페이스에 대한 프로그래밍을 하고 싶어하지만 사용하기에는 너무 낮은 수준의 기술입니다c# 은 별로 적합하지 않습니다. 잠시 흥정을 한 후 SLR로 합시다.

꽃을 겨냥하기 위해 N개의 SLR 장치가 필요한 시나리오를 가정하고, 30초마다 사진을 찍어 자동으로 웨이보에 게시합니다.

기술 포인트

Canon SDK

WIA 표준

Canon sdk는 dll을 제공합니다. Canon의 해당 카메라 모델은 SDK를 호출하여 쉽게 액세스할 수 있지만 .NET 버전의 SDK에서는 카메라에 있는 데이터에 대한 액세스를 제공하지 않는다고 언급했습니다. 따라서 SLR 카메라에서 데이터를 얻는 방법이 문제가 됩니다. 일부 학생들은 혼란스러울 수 있습니다. SLR 카메라가 컴퓨터의 USB 포트에 연결되어 있으면 드라이브 문자가 생성됩니다. DriveInfo.GetDrives()를 직접 사용하여 드라이브 문자 탐색을 얻는 것만으로는 충분하지 않습니까? 먼저 알려드리겠습니다. USB 슬레이브 장치의 분류는 USB 장치 인터페이스 설명자에 해당하는 bInterfaceClass 바이트에서 얻을 수 있습니다. bInterfaceClass의 일반적인 코드는 1, 2, 3, 6, 7, 8, 9, 10, 11, 255입니다. 각각의 의미는 1-오디오: 오디오 장치를 나타냅니다. 2-통신기기 : 전화, 모뎀 등의 통신장비 3-HID: 키보드, 마우스 등과 같은 인간-컴퓨터 상호 작용 장치. 스캐너, 카메라 등과 같은 6개의 이미지 이미징 장비. 때로는 디지털 카메라도 이 범주로 분류될 수 있습니다. 7-프린터 수업. 단방향, 양방향 프린터 등 8-대량 저장 대용량 저장 클래스. 특정 저장 기능을 갖춘 모든 것이 이 범주로 분류될 수 있습니다. 예를 들어, 대부분의 디지털 카메라가 이 범주에 속합니다. 9허브 클래스. 11칩 카드/스마트 카드. 255-vendor 특정 제조업체의 맞춤형 클래스로 주로 일부 특수 장비에 사용됩니다. 인터페이스 어댑터 카드 등

저희 드라이브인포가 캡쳐할 수 있는 장치 종류는


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


입니다. 일반적으로 USB 디스크 장치는 착탈식이지만 SLR 카메라는 PortableDevices이며 이 유형은 GetDrives 메서드를 사용하여 얻을 수 없습니다. Windows Systems32는 휴대용 장치를 위한 일련의 api 방법을 제공합니다. 관심 있는 학생들은

.Net 玩单反的技巧

여기서 WIA를 선택합니다. Windows의 약어입니다. Image Acquisition 현재 사용 가능한 버전은 Windows Millennium Edition(Windows Me) 이상 버전의 Windows 시스템에서 제공되는 디지털 영상 획득 서비스인 WIA 1.0입니다. . WIA는 out-of-process 서비스를 사용하여 구현된 COM 구성 요소입니다. 대부분의 out-of-process 서비스 프로그램과 달리 WIA는 자체 데이터 전송 메커니즘(IWiaDataTransfer 인터페이스)을 제공하여 이미지 데이터 전송 중 성능 손실을 방지합니다. 고성능 IWiaDataTransfer 인터페이스는 공유 메모리를 사용하여 데이터를 클라이언트 프로그램으로 전송합니다.
WIA에는 장치 관리자, 미니드라이버 서비스 라이브러리, 장치 미니드라이버라는 세 가지 주요 구성요소가 있습니다.
◆장치 관리자: 이미지 장치 열거, 장치 속성 획득, 장치에 대한 이벤트 생성 및 장치 객체 생성
◆미니드라이버 서비스 라이브러리: 장치 독립적인 모든 기능 실행 서비스;
◆장치 미니드라이버 설명 매핑: WIA 속성 및 특정 장치에 대한 명령.
DeviceManagerClass().DeviceInfos의 정보를 통해 SLR의 CameraDeviceType에 속하는 장치 정보를 수집할 수 있습니다. Video와 같은 다른 유형도 유사합니다. 행동 양식.


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


Canon SDK .net 버전에서는 5가지 유형의 핸들 위임을 제공합니다


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


첫 번째는 데이터 복사, 사진 저장 등의 데이터 처리에 사용됩니다.

PC에서 두 번째로 새로운 카메라 기기 발견

세 번째는 사진 촬영으로 인한 일련의 변경과 같이 카메라의 데이터 스트림과 같은 속성 상태의 변경을 알리는 데 사용됩니다.

네 번째는 다음과 같은 파일 작업에 사용됩니다. 파일 생성, 삭제 등

다섯 번째는 전원이 비정상적으로 켜졌다 꺼지는 등 카메라 자체의 상태 시간으로 사용됩니다.

데모 프로그램을 참고하세요. 다양한 응용 시나리오. 로드 방법이 멀티스레딩을 활성화하지만 하드 디스크 IO 자체는 직렬입니다.

렌더링

새로 추가된 카메라 장비

.Net 玩单反的技巧

프로그램으로 제어되는 카메라로 사진 촬영

.Net 玩单反的技巧

Load in -카메라 사진 데이터

.Net 玩单反的技巧


위 내용은 SLR 재생을 위한 .Net 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.