質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

1回答

2057閲覧

DirectShow.NetにおけるIAMCameraControlの使い方について

gazinn

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2018/10/24 10:49

前提・実現したいこと

DirectShow.NetでWebカメラの焦点を変えるプログラムを作ろうとしています。
これにはDirectShow.NetのIAMCameraControlというインターフェイスを使えば実現できそうです。
しかし、ネット上にDirectShow.Netの情報があまりないため、ほぼ手探りでやるしかなく難航しています。
IAMCameraControlの簡単なサンプルプログラムを教えていただけませんか?

該当のソースコード

自分でも作ってみましたが、動きませんでした。

C#

1using System.Drawing; 2using System.Windows.Forms; 3using DirectShowLib; 4 5 6namespace focusget 7{ 8 public partial class Form1 : Form 9 { 10 public Form1() 11 { 12 InitializeComponent(); 13 } 14 15 private void Form1_Load(object sender, EventArgs e) 16 { 17 #Webカメラの情報を取得 18 DsDevice[] device = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); 19 IAMCameraControl cameraControl = device[0] as IAMCameraControl; 20 21 #カメラの焦点距離を決める 22 var prop = CameraControlProperty.Focus; 23 var flag = CameraControlFlags.Manual; 24 int value = 5; 25 cameraControl.Set(prop, value, flag); 26 } 27 } 28} 29

補足情報(FW/ツールのバージョンなど)

DirectShow.Net v2.1
VisualStudio Community 2015
Visual C#(2015)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

手元にカメラがないので、調べた限りの想像となります。

IAMCameraControlの取得の方法が異なるのではないでしょうか?
IBaseFilterへデバイスを登録し、それをIAMCameraControlへキャストという感じのソースは見かけるのですが、取得したDsDeviceをそのままIAMCameraControlへキャストしている例を見かけませんでした。

C#

1DsDevice[] devs = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); 2IFilterGraph2 graphBuilder = (IFilterGraph2)(new FilterGraph()); 3IBaseFilter capFilter = null; 4int hr = graphBuilder.AddSourceFilterForMoniker(devs[0].Mon, null, devs[0].Name,out capFilter); 5IAMCameraControl cameraControl = capFilter as IAMCameraControl;

追記
内カメラがついたノートPCで試したところ
質問者さんが提示されているコード

C#

1IAMCameraControl cameraControl = devs[0] as IAMCameraControl;

では、cameraControlがnullとなっていました。
下記コードでは、「指定されたプロパティ ID は、指定されたプロパティ設定用にサポートされていません。」とエラーとなりましたのでFocusの調整をサポートしていないカメラだと思われます。

C#

1DsDevice[] devs = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); 2IFilterGraph2 graphBuilder = (IFilterGraph2)(new FilterGraph()); 3IBaseFilter capFilter = null; 4int hr = graphBuilder.AddSourceFilterForMoniker(devs[0].Mon, null, devs[0].Name, out capFilter); 5IAMCameraControl CamControl = capFilter as IAMCameraControl; 6 7try 8{ 9 int min = 0; 10 int max = 0; 11 int step = 0; 12 int def = 0; 13 CameraControlFlags flag = CameraControlFlags.None; 14 15 hr = CamControl.GetRange(CameraControlProperty.Focus, out min, out max, out step, out def, out flag); 16 DsError.ThrowExceptionForHR(hr); 17} 18catch (Exception ex) 19{ 20 Console.Write(ex.Message); 21}

投稿2018/10/25 02:52

編集2018/10/25 03:07
YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gazinn

2018/10/25 08:05

回答ありがとうございます。 私も同じコードで試してみましたが、同様のエラーが出ました。 サポートされていないカメラのようです。
YAmaGNZ

2018/10/25 08:24

メッセージからサポートされていないと判断しましたが、実際にサポートされていないのかは判断できていません。 以前の質問でのC922 Proはオートフォーカス、マニュアルフォーカスをサポートしてそうなので、私が提示したコードは間違っている可能性もあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問