CULBバナナでもワニでもありません.GoogleAnalyticsSyntaxHighlighter2010年11月15日月曜日LabVIEWでスクリーンキャプチャを撮ってみた先日、同僚から「Windows環境で、アクティブウィンドウ以外の任意領域のヒストグラムを取るアプリってある?」と聞かれました。用途を聞いてみると、PCにCCDカメラを接続してて、ライブビューはカメラ付属のソフトウェアで出来るんだけど、そのソフトにライブヒストグラム機能が付いてない、ということらしい。「LabVIEWから直接CCDカメラをコントロールして、ライブビュー撮ればイイんじゃね?」とは言ったものの、なんかしっくりきません。LabVIEWからスクリーンキャプチャを取得して、それを2Dピクチャに出来れば、あとはどうにでも解析できるはずです。いうわけでテストしてみました。調べた限りでは、LabVIEW自体にスクリーンキャプチャを撮る機能はないみたいです。外部アプリにキャプチャさせた画像をクリップボードに貼りつけて、それをLabVIEWから取得しようかと思いましたが、クリップボードの画像ファイルをLabVIEWで取得するのも一筋縄ではいかなさそうです。呼んでやってみました。「System.Drawing.Graphics.CopyFromScreen()」という欲しい機能そのものなメソッドがありますので、これを使うことにします。以下のようなVIを作ってみました(ダウンロード)。(VIスニペットにしようと思ったんですが、.NETコンテナのリファレンスが外れるのでヤメました)上の部分は、プライマリモニタの画素サイズを取得して、フルスクリーンサイズのBitmapを作成し、その表示用PictureBoxのサイズ設定を行っています。下の左側で、そのBitmapからGraphicsを作成し、CopyFromScreenメソッドでBitmapにスクリーンキャプチャして、PictureBoxに貼りつけています。右下の部分で、PictureBoxのインボークメソッドで画像データを取得し、ピクスマップに変換して2Dピクチャに表示しています。whileループで廻しているので、リアルタイムにキャプチャし表示し続けます。一応、サブVI化したものも作りました(ScreenCapture.vi)。Get」で呼び出して、スクリーンキャプチャを2Dピクチャとして取得します。フルスクリーンをキャプチャさせると、えらいメモリ喰うは遅くてカクカクだわ、で使いにくいので、必要領域だけキャプチャさせるように作り直して使うのがイイんじゃないでしょうか。Adsense社による広告配信のために、Cookieやウェブビーコンを使用したデータ収集をおこなっています。ブラウザのCookie機能をオフにすることで、第三者へのデータ送信をおこなわせないことが可能です。詳しくは、Adsense広告の公式プライバシーポリシーをご覧ください。http://www.google.com/intl/ja/privacy.html本ブログで紹介したプログラム等による不利益等は一切関知いたしません。