通常、WEBカメラの画像は、鏡と同じではなく、
右に手を振れば、画面上は、反対に手が動く、左右逆の表示になっているが、
なんとか、これを、鏡と同じ用に表示させるための試行錯誤。
途中断念して、
ミラー表示機能があるカメラを買おうかと思うぐらい・・・
***
まず、思いついたのが、
Directshowを使っているので、そのFilter Pluginを使う方法。
- Directshow Video Rotate Filter v.0.2.0
(Delphiのソースなので、コードの参考になるかと思って) - RotateFilter.dll @source forge
(完成済みの反転フィルター)
これを、GraphEditなるツールで、加工するっぽい
DL&取説 >> http://homepage2.nifty.com/sophia0/freesoft/GraphEdit/
でも、肝心のフィルターが、インストール出来ない・・・
上記に書いてあるとおり、
> regsvr32 proppage.dll
と、dllを登録したが、
うまくいかず、インストールの仕方を探した始末w
http://www.independence-sys.com/weblog/item/159
「モジュールが見つかりません」と出て、先に勧めなかったが、
うちのPCが64bitなのもあって、Windows > System32だけではなく、
Windows > SysWOW64にも、コピーが必要らしく、
これで、DLL(フィルター)の登録が出来た。(.axという拡張子であることが、多い)
***
しかし、そのフィルターがどこを探しても見つからない・・・
再起動も、何回もし、1つ1つ見ていったけど、
素通りしてしまったのか??
もう諦めかけていたところ、directshow 以下に発見した「VideoRotate.ax」
でも、
Delphi 上でも、GraphEditでも、
使い方がまったくわからない・・・
***
諦めて、別の方法を探すことにしたら、偶然見つけた、サンプル
ありがたいことに、ソース付きのデモがあり、
中身を見てみると、至ってシンプル!!
というか、一番やりたくなかった、
DirectShowのフィルターを使わない手法ww
だが、
この際、疲れたので、そんなことは言っていられず、
コードを拝借することにした。
概略 >
Direct9を使いVideoソースをキャプチャーし、PaintBox.Canvasに描画している
Demo03_MainForm / TForm1.OnNewVideoFrame イベントより
Paintbox1.Canvas.CopyRect( Rect(0, 0, fVideoBitmap.Width, fVideoBitmap.height), fVideoBitmap.Canvas, Rect(fVideoBitmap.Width-1, 0, 0, fVideoBitmap.height))
たった、これだけ・・・
嫌になる・・・
今回、タイマーで、カメラの画像をキャプチャーし、
その中のバーコードを読み取るコードがあり、
そこに、埋め込むことにしたため、
0.1秒毎の描画なので、ちょっとカクカクだけど、仕方ない。
// http://www.geocities.jp/asumaroyuumaro/program/tips/stretchblt.html bmp.Width := PaintBox.Width; bmp.Height := PaintBox.Height; SetStretchBltMode(bmp.Canvas.Handle, COLORONCOLOR); StretchBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, vbmp.Canvas.Handle, 0, 0, vbmp.Width, vbmp.Height, SRCCOPY); // horizon flip >> http://www.delphibasics.info/home/delphibasicsprojects/directxdelphiwebcamcaptureexample bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.height), bmp.Canvas, Rect(bmp.Width-1, 0, 0, bmp.height));
DSPackにあるTVideoWindowから、
以下のリンク1. のTStillCameraでbmpにキャプチャーし、
カメラの画像を引き伸ばしてから、反転させ、
TPaintBoxに描画。
ブサイクだけど、誰も見ない処理なので、これで我慢することに。
ホントは、もっとかっこよく決めたかったんだけど、
それも、誰も見れないので・・・(笑
その他、DirectShow関連リンク
- http://ht-deko.com/ft1112.html
- http://ht-deko.com/tech062.html
- http://www.geocities.jp/wanko_70k/DSPack_1.html
(2で紹介されたページ) - http://www.vwlowen.co.uk/directshow/page01.htm
- http://delphivn.blogspot.jp/2008/01/programming-directshow-in-delphi.html
(3で紹介されたページ)