Programing

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で紹介されたページ)

 

-

Office Mobile でOLEが使えるか検証

Lenovo Yoga tablet 2 8inc に Windows10にアップグレードしましたが、
本来の目的は、Office mobileが、OLE?で
使えるかとう、検証のため。

Excel mobile

Office mobileは、10.1inc以下のタブレットであれば、無償で使えるOfficeで、

>?「Office Mobile」のライセンス @日経トレンド

メインアプリから制禦し、
印刷だけを、Excelさせようと目論んだのですが、

 

結果は、

Office Mobile Excel OLE

 

ダメみたい・・・Orz

 

残念です・・・

***

Excel Viewer を試してみましたが、

> https://www.microsoft.com/en-us/download/details.aspx?id=10

同じく、ダメ。

 

と、当然か・・・

試しに、OpenOfficeが、外部制御(OLE)に対応しているか調べてみたところ、
どうやら、出来るみたい。

>?VBからOpenOffice.orgを操作する

さらに、

OpenOfficeの利用 @Delphi
OpenOfficeの利用 @Delphi
OpenOfficeの制御サンプル @Delphi
OpenOfficeの制御サンプル @Delphi

http://edn.embarcadero.com/jp/article/40857/images/40857/b5.pdf より

Microsoft Excel を、買ってもらったほうが、
工程的には、楽なんだけど、

できるだけ、費用負担を軽くしたいので、ちょっと、試してみます。

OpenOffice CALc 印刷サンプル @Delphi

ありがたいことに、サンプルまで♪

PS.

Officeのライセンスを調べれば調べるほど、隙間がないことがわかります。
そして、一見わかりにくくしてあるので、ややこしいと思われていますが、
実際のところ、とってもややこしいです!

 

一番ややこしくさせている原因が、

Office365というサービス。

ざっくり言うと、オンラインストレージや、
最新のプログラムにアップグレード出来るサービスですが、

では、このサービス期間が切れた場合、どうなるかというと、

Officeはそのまま使えます!

次に、ややこしくしている

アップグレードと、アップデート

Office2013を使っていて、Office365のサービスに加入していると、
Office2016にアップグレードすることが出来ます。

その後、Office365のサービスが切れたとして、
Office2016のアップデートはされます(バグフィックスとか)が、
Office 2017へのアップグレードは出来ません。

Office365 Solo以外の製品は、「永年使用可」と書いてあり、
Office365 が切れていても、そのバージョンのOfficeは使い続けられますが、
サポート期限が儲けられているため、
それ以降は、バグフィックスなどは行われなくなります。

***

1ライセンス/2PC

Office 2016 Personalが、約30000円

1つ買うと、2つのPCに入れていいけど、
使える人は、一人だけ。

例 > ひとり暮らしで、お家にディスクトップPCとノートPCがある場合、
これら2台にインストールするのは、OK

例 > 家族3人暮らしで、お家にディスクトップPCとノートPCがある場合、
これら2台にインストールしてもいいけど、使っていいのはお父さんだけ。

半額で1ライセンス/1PCで売ってくれたら、
話は早いんだけど、
昔から、Officeはこの値段で、
最近、2台持つ人も多くなったので、

もう1台にインストールしてもいいよ

というやつ。

でも、誰が使っているか、なんてコンピュータにはわかりません。
顔認証機能を付けないかぎり、ネ。


 

ま、こんなルールになっているわけですから、
これを、お客様に2台入れてもいいよ、とは言いにくいため、
OpenOfficeがOLEで使えるのなら、
そっちのほうが制約がなくていいわけです。

どうせ、年に数回レイアウト変更と、
印刷にしか、使わないのですから!

-