ワカラン!
と叫びたくなってた。ここ何日かずーっと。
Webカメラを利用していて、カメラからの映像を 320×240ピクセルで取得していたが、 よく考えたら320×240=約8万画素だ。 このカメラは30万画素だったはず。
そういえばどうやって解像度を変えるんだろう、と ドライバソフトの設定や、コントロールパネルを探すが どこにもそんな設定がない。 30万画素のカメラを本領発揮させられない。
猛烈にいろいろ調べてみると、 プログラム上から解像度を設定すべきだということが やんわりとわかってきた。 ハードウェアとして設定があると思ってたのに まさかソフトウェア側で設定するとは。
解像度や画像の大きさに関係しそうなところを いろいろいじってみるが、どうにも変わらない。 処理が失敗したり、何の影響もなかったり。
そもそもDirectShowの資料は世の中に少なすぎる。 というか、Direct3DやDirectDraw、DirectSoundと比べて DirectShowやDirectMusicは設計思想が違いすぎる。 明らかに考え方が異なる。クセが強すぎる。 しかも公的にはDirect3DとDirectShowに互換性がない。ひどい。
数時間同じ問題で悩み続けること数日。 悩みすぎて脳みそが破裂するかと思った。 総当りしていこうにも インターフェイスやメソッドの種類が多すぎて どれをどう使うべきかなかなかわからない。 ネット中を探し回って それらしき情報を少しずつ集める。本当に少しずつ。
で、なんとか解像度を変更することに成功。 ちゃんとカメラ画像がザラザラになったり きめ細かくなったりしたのに感動。
しかし、新たな問題が発生。 カメラを初期化するときに解像度を変更することはできたが、 今回は、プログラム実行中に自由に変更できるようにしたい。
「解像度の変更」ボタンを押したら 次回の起動から有効、という風にすれば 次回のカメラ初期化時に 解像度を設定すればいいだけなので楽だが、 それではブサイクすぎる。ポリシーに反する。 そもそも次回は別のカメラが接続されている可能性もある。 やはり生の映像を見ながら解像度を切り替える方が絶対にいい。
で、カメラの初期化後に同じ処理をしようとしたら動かない。
なぜ。
一体何が原因なのか、どこが悪いのか、 カメラに関するあらゆる処理を終了させて また1から初期化し直してもダメ。そんなバカな。 一度でも初期化処理を通ると、 いくらキレイに片付けても解像度変更ができない。
再び脳みそが液状化して 耳から出てくるんじゃないかと思うぐらい悩みまくり、 ネット上を探し回るも、「DirectShow」で「Webカメラ」で 「解像度変更」で「初期化後もう一度」とかになると レアケースすぎて情報が見つからない。
何がどう問題なのかを自分なりに予測し、 おそらく終了処理しただけでは 元に戻らない何ががあるのだという想像を元に ある処理に見当をつける。 この部分を元に戻す処理をしないと設定変更が効かない様子。 その部分について記述している情報をなんとか探し出し、 これまた四苦八苦して処理を作る。
本当に本っ当ーーに苦労してなんとか成功。
ボタンを押したらカメラの解像度が変更できる、という 非常に地味な処理が これまでの何よりも大きい苦労をもって完成した。
|