2009-11-10 17 views
8

Mam nadzieję otrzymać ogólne wskazówki dotyczące osiągnięcia pozornie prostego celu. Mam aparat DSLR (Canon EOS 50D) i muszę napisać aplikację, która powie kamery, aby zrobić zdjęcie. Muszę też przesłać obraz do komputera i ewentualnie usunąć go z pamięci kamery. Premia to uzyskanie podglądu na żywo z kamery w mojej aplikacji. Moje środowisko to Windows (XP Pro lub Vista Enterprise) i .Net 3.5 (C#).Przyciąganie obrazów z Windows C# Canon SDK vs PTP lub MTP

Zrobiłem kilka badań i znalazłem kilka opcji. Ktoś, kogo znam, będzie działał, ale ogranicza mnie do używania w przyszłości tylko aparatów Canon. Znalazłem i pobrałem zestaw SDK firmy Canon, który zapewnia wiele funkcji. Zerknąłem na SDK i gdy jest on obszerny i napisany w C, ma owijki C#, które przyspieszą rozwój.

Inna opcja, którą znalazłem nazywa się urządzenia przenośne z systemem Windows. Najwyraźniej jest to interfejs API, który będzie rozmawiał z urządzeniami, które implementują standardy PTP i MTP. Jest oparty na COM i na tyle, na ile mogę to stwierdzić, nie ma owijaczy .Net. To nie jest jednak przystanek na pokaz. Mogę P/Inwokować potrzebną funkcjonalność lub napisać bibliotekę DLL zarządzanego C++, aby użyć jej w mojej aplikacji do rozmowy z kamerą.

Szukam kogoś, kto ma doświadczenie w pracy z WPD, by dać mi wskazówki. Przeanalizowałem dokumentację i widziałem odniesienia do przesyłania obrazów i usuwania obrazów. Nie widziałem jednak wzmianki o poleceniach do zrobienia zdjęcia, uzyskania obrazu podglądu ani o fokusie/automatycznym ustawianiu ostrości.

+0

Jestem zainteresowany widząc odpowiedź na to pytanie. Osobiście, jeśli sam piszę tę aplikację, najpierw wypróbuję Canon SDK. Poza tym, jeśli masz już zestaw obiektywów Canon, prawdopodobnie będziesz trzymać się z Canon w przyszłości :-). –

+1

To brzmi jak świetny projekt CodePlex. Mam Rebel XTi i to brzmi jak zabawna koncepcja do pracy. Jeśli zdecydujesz się rozpocząć projekt CodePlex, zdecydowanie daj mi znać! –

+0

Kontynuowane są prace nad opakowaniem C++/CLI dla pakietu Canon SDK. To było prawdziwe wyzwanie. Nie sądzę, bym mógł wydać projekt CodePlex, ponieważ nie będę miał prawa do kodu. Przepraszam. Chciałbym mieć więcej swobody w tym zakresie. – Nate

Odpowiedz

2

WPD API zapewnia WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE polecenia

Nie jestem pewien, czy aparat obsługuje go, ale powinien być na tyle prosty, aby dowiedzieć się. Jeśli możesz pobrać narzędzie "wpdinfo" z zestawu sterowników i uruchomić go przy podłączonej kamerze, wyślij mu komendę WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS i sprawdź, czy obsługuje polecenie przechwytywania. Jeśli tak, możesz spróbować.

+0

Dzięki! Właśnie tego szukałem. Jeszcze go nie wypróbowałem, ale kiedyś dostanę szansę. Obecnie używam pakietu Canon SDK. Ma swoje problemy, nie wspominając o tym, że działa tylko z aparatami Canon EOS ... – Nate

+0

Skończyłem próbując tego. Niestety nie był obsługiwany przez mój EOS 50D. Jeśli kiedykolwiek będę miał inną kamerę, żeby to wypróbować, zrobię to. Wysłałem e-mailem do programistów WPD firmy microsoft (przy użyciu blogu WPD) listę producentów, którzy obsługują różne polecenia WPD, ale nie mają takiej listy. Byli jednak bardzo pomocni w ustaleniu, w jaki sposób powinienem używać WPD. – Nate

2

PTP i MTP są protokołami do przesyłania plików z aparatu cyfrowego (DSC). Protokoły nie zapewniają funkcji wyzwalania nowych obrazów ani ustawiania kontroli ekspozycji. Utkniesz, używając SDK dla konkretnego aparatu. Jeśli chcesz obsługiwać wiele dostawców Nikon ma pakiet SDK, który zapewnia podobną obsługę, co Canon SDK dla swoich kamer.

Więcej informacji na PTP i MTP można znaleźć tutaj: http://en.wikipedia.org/wiki/Picture_Transfer_Protocol i http://en.wikipedia.org/wiki/Media_Transfer_Protocol

EDIT

zapomniałem wspomnieć, że WIA może być interesujące dla ciebie, zakładając, że kierowca aparatu zapewnia Interfejs WIA.

+0

Spojrzałem na WIA, który został zastąpiony przez urządzenia przenośne z systemem Windows. Chociaż nie jestem pewien, czy PTP lub MTP obejmuje tę funkcję (robienie zdjęć), widziałem informacje w WPD, które przypominają, że może. W każdym razie, WPD ma (patrz poniżej), co rozważałem przy użyciu tej aplikacji. Od tego czasu zdecydowałem się użyć SDK i prawdopodobnie eksplorować WPD w późniejszym czasie. "Aplikacje zbudowane na WPD mogą eksplorować urządzenia, wysyłać i odbierać treści, a nawet sterować urządzeniem, na przykład robić zdjęcia ..." http://msdn.microsoft.com/en-us /library/dd388998%28VS.85%29.aspx – Nate

0

To jest naprawdę ogólne, ale może pomóc.

Musiałem napisać aplikację, która używała dwóch różnych skanerów kodów kreskowych od dwóch różnych dostawców z różnymi SDK. Stworzyłem interfejs, który definiował metody i zdarzenia, które chciałem kodować, a następnie napisał klasy adapterów, które zaimplementowały mój interfejs.

To zadziałało dobrze w moim przypadku, a przejście z jednego do drugiego było całkiem bezproblemowe. Jeśli zastosujesz to samo podejście, nie będziesz całkowicie zależny od jednego SDK.

+0

Tak, interfejs jest podany. Mogę łatwo stworzyć klasę bazową lub interfejs z ogólnymi metodami i zaimplementować w razie potrzeby. Chociaż jest to przydatne, posiadanie pojedynczego zestawu SDK dla wielu marek kamer wymagałoby mniej pracy. Dzięki. – Nate

2

Komentarz od TallGanglyGuy jest niepoprawny. ptp pozwala ci wyzwalać nowe obrazy i zmieniać ekspozycję itp.Niektóre aparaty mają oprogramowanie układowe, które eksponuje tylko niektóre polecenia ptp.

PTP popiera wspólne kontrole urządzeń, takich jak zrobieniu zdjęcia, tak aby użytkownik mógł skorzystać z połączenia PC/kamery w nowy i znowu różne sposoby, bez konieczności dodatkowego oprogramowania.