この記事では、DSLR を再生するための .Net の使用方法について説明します
背景
私は 1 年以上庭を訪れていませんが、業界のサークルが変わり、少し忙しすぎると感じています。さまざまな研究開発文化、ゲームサークルのテクノロジーフロー、電子商取引サークルのビジネスフロー、メディアサークルのアートフローなどに触れることも少しやりがいがあります。
このアプリケーションの背景は、一眼レフカメラを自動化することです。上司自身は、USBインターフェースのプログラミングをしたいと考えていますが、そのような低レベルの技術でそれを行うのにc#を使用するのはあまり適していません。しばらく値切った後、一眼レフにしましょう。
花を狙い、30 秒ごとに写真を撮り、Weibo に自動的に投稿するには N 台の一眼レフ デバイスが必要なシナリオを想定します。
技術的なポイント
Canon SDK
WIA 標準
Canon SDK は、.net 開発者が参照するために dll を提供しており、SDK を呼び出すことで、Canon の対応するカメラモデルを使用するのに便利ですが、カメラを入手するために使用されます。内部 データは .net バージョンの SDK では提供されません。そこで問題になるのが一眼レフカメラ内のデータをどうやって取得するかということです。学生の中には混乱する人もいるかもしれません。一眼レフ カメラがコンピュータの USB ポートに接続されている場合、DriveInfo.GetDrives() を直接使用してドライブ文字を取得するだけでは十分ではないでしょうか。最初に説明します。USB スレーブ デバイスの分類は、USB デバイス インターフェイス記述子に対応する bInterfaceClass バイトから取得できます。 bInterfaceClass の一般的なコードは、1、2、3、6、7、8、9、10、11、255 です。それぞれの意味は 1-audio: オーディオ デバイスを示します。 2-通信機器:電話、モデムなどの通信機器。 3-HID: キーボード、マウスなどの人間とコンピュータの対話デバイス。スキャナ、カメラなどの 6 枚の画像を撮影する機器。デジタル カメラもこのカテゴリに分類される場合があります。 7-プリンタークラス。一方向プリンタ、双方向プリンタなど。 8マスストレージマスストレージクラス。特定のストレージ機能を備えたすべてのものは、このカテゴリに分類できます。たとえば、ほとんどのデジタル カメラがこのカテゴリに分類されます。 9ハブクラス。 11 チップ カード/スマート カード。 255 ベンダー固有のメーカーのカスタム クラス。主に一部の特殊な機器に使用されます。インターフェースアダプターカードなど
driveinfo がキャプチャできるデバイス タイプは
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 ディスク デバイスは Removable ですが、一眼レフ カメラは PortableDevices であり、このタイプは GetDrives メソッドを使用して取得できません。 Windows system32 は、ポータブル デバイス用の一連の api メソッドを提供しています。興味のある学生は試してみてください。ここでは、WIA インターフェイス プログラミングを選択します。現在利用可能なバージョンは、WIA 1.0 です。 Windows Millennium Edition (Windows Me) 以降のバージョンの Windows システムで提供されるデジタル画像取得サービス
は、デジタル画像デバイスの管理にも使用できます。 WIA は、アウトプロセス サービスを使用して実装された COM コンポーネントです。ほとんどのアウトプロセス サービス プログラムとは異なり、WIA は独自のデータ転送メカニズム (IWiaDataTransfer インターフェイス) を提供することで、画像データ転送中のパフォーマンスの低下を回避します。高性能 IWiaDataTransfer インターフェイスは、共有メモリを使用してクライアント プログラムにデータを転送します。WIA には、デバイス マネージャー、ミニドライバー サービス ライブラリ、デバイス ミニドライバーの 3 つの主要コンポーネントがあります。 ◆デバイス マネージャー: イメージ デバイスを列挙し、デバイス プロパティを取得し、デバイスの
イベント を確立し、デバイス オブジェクトを作成します。◆ミニドライバー サービス ライブラリ: すべてのデバイスに依存しないサービスを実行します。
◆デバイス ミニドライバー解釈マッピング: 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++;
}
}
}
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 用の新しいカメラ デバイスを発見する 2 番目
3つ目は、撮影による一連の変化など、カメラ内のデータの流れなどの属性の変化の通知に使用されます
4つ目は、ファイルの作成や削除などのファイル操作に使用されます
5番目は、カメラ自体のステータス、電源の異常なオン/オフなどです。
さまざまなアプリケーションシナリオについては、デモプログラムを参照してください。ロードメソッドはマルチスレッドを可能にしますが、ハードです。ディスク IO 自体はシリアルです。真剣に考えないでください。
レンダリング
写真を撮るためのプログラム制御カメラ
。写真データ
以上がSLR をプレイするための .Net のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。