WEBカメラの動画を反転させる@Delphi

通常、WEBカメラの画像は、鏡と同じではなく、
右に手を振れば、画面上は、反対に手が動く、左右逆の表示になっているが、
なんとか、これを、鏡と同じ用に表示させるための試行錯誤。

途中断念して、

ミラー表示機能があるカメラを買おうかと思うぐらい・・・

***

まず、思いついたのが、
Directshowを使っているので、そのFilter Pluginを使う方法。

これを、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関連リンク

  1. http://ht-deko.com/ft1112.html
  2. http://ht-deko.com/tech062.html
  3. http://www.geocities.jp/wanko_70k/DSPack_1.html
    (2で紹介されたページ)
  4. http://www.vwlowen.co.uk/directshow/page01.htm
  5. http://delphivn.blogspot.jp/2008/01/programming-directshow-in-delphi.html
    (3で紹介されたページ)

 

WEBカメラの動画を反転させる@Delphi