|
.NET TIPS スクリーンやウィンドウをキャプチャするには?[2.0のみ、C#、VB]デジタルアドバンテージ 一色 政彦2006/03/24 |
![]() |
|
|
|
「TIPS:アプリケーション画面のハードコピーを保存するには?」では、プログラムによって[Alt]+[Print Screen]キーを発行して、スクリーン・キャプチャを行う方法を紹介している。このようにキー・ストロークをプログラム的に発行してWindowsシステムにスクリーン(=画面)をキャプチャさせる方法を紹介したのは、.NET Framework 1.xにはスクリーン・キャプチャを行うための機能が搭載されていなかったからだ。
しかし.NET Framework 2.0ではプログラムから直接、スクリーンをキャプチャするためのメソッドが追加されている。具体的には、次のメソッドである。
- Graphicsクラス(System.Drawing名前空間)
の CopyFromScreenメソッド
このメソッドを呼び出すと、スクリーンからGraphicsオブジェクトが持つ描画サーフェイスへ、スクリーン・イメージ(=ピクセルの四角形の色データ)を「ビット・ブロック転送」する(いわゆる“BitBlt”)。CopyFromScreenメソッドにはいくつかのオーバーロードが用意されているが、本稿では6つのパラメータを持つバージョンを紹介する。それぞれのパラメータの意味を紹介すると、次のようになる。
- 第1パラメータ:転送<元>の四角形の左上隅のX座標(int型/Integer型の値)。
- 第2パラメータ:転送<元>の四角形の左上隅のY座標(int型/Integer型の値)。
- 第3パラメータ:転送<先>の四角形の左上隅のX座標(int型/Integer型の値)。
- 第4パラメータ:転送<先>の四角形の左上隅のY座標(int型/Integer型の値)。
- 第5パラメータ:四角形のサイズ(Size型の値)。
- 第6パラメータ:スクリーン・イメージ(=ピクセルの四角形の色データ)をビット・ブロック転送する際の方式を指定する(CopyPixelOperation列挙体の値)。CopyPixelOperation列挙体(System.Drawing名前空間)には、そのままコピーする(SourceCopy)だけでなく、例えばコピー元とコピー先の各ピクセルの色をAND演算で組み合わせて出力する(SourceAnd)など、さまざまなオプションが用意されている。詳しくはMSDNの「CopyPixelOperation 列挙体」の説明を参照してほしい。
単にスクリーン・キャプチャするだけなら、第6パラメータは常に「CopyPixelOperation.SourceCopy」を指定すればよい。
スクリーン・キャプチャを行うサンプル・プログラム
次の画面は、CopyFromScreenメソッドを利用してスクリーン・キャプチャを行ったサンプル・プログラムの実行例である。このサンプル・プログラムは、キャプチャしたい対象領域をコンボボックスから選択して[キャプチャ]ボタンをクリックすると、その領域をキャプチャしてビットマップ・ファイル(.bmpファイル)として保存したうえで、そのファイルを自動的に開くという仕様になっている。
![]() |
|||||||||
![]() |
|||||||||
| CopyFromScreenメソッドを利用したサンプル・プログラムの実行例 | |||||||||
| サンプル・プログラムを実行したところ。このサンプル・プログラムでは、対象領域に対する単純なスクリーン・キャプチャを行い、ビットマップ・ファイル(.bmpファイル)として保存する。 | |||||||||
|
この実装コード(Clickイベント・ハンドラ部分のみを抜粋)は次のとおりだ。なおソース・コード全体は以下の説明欄にあるリンクからダウンロードできる。
|
||
| CopyFromScreenメソッドを利用したサンプル・プログラムのソース・コード(上:C#、下:VB) | ||
このソース・コードは、以下のような実装内容となっている。
まずコンボボックスで選択された値に基づき、スクリーン領域の座標およびサイズを決定している。ここでのスクリーン全体(≒ディスプレイ解像度)のサイズを取得する方法についての詳細は、「TIPS:ディスプレイの解像度を取得するには?」を参照してほしい。
またフォームやコントロールなどのウィンドウ領域は、それぞれのBoundsプロパティから取得できるが、詳しくは「TIPS:クライアント領域やウィンドウ領域の座標を取得するには?」を参照していただきたい。なおそこで取得したウィンドウ領域をスクリーン座標系で用いるには、(RectangleToScreenメソッドなどによる)座標変換が必要となる。この座標変換に関しては、「TIPS:スクリーン座標←→クライアント座標の変換を行うには?」を参照されたい。
次にそのスクリーン領域のサイズに合わせたBitmapオブジェクトを作成し、そのGDI+描画サーフェイス(=Graphicsオブジェクト)を取得して、CopyFromScreenメソッドを使ってそこにスクリーン・イメージをビット・ブロック転送する。
後はビットマップ画像を保存して表示を行っている。画像の保存に関しては「TIPS:画像をファイルに保存するには?」を、ビットマップ画像の表示に関しては「TIPS:ほかのアプリケーションを実行するには?」を参考にしてほしい。![]()
| 利用可能バージョン:.NET Framework 2.0のみ カテゴリ:クラス・ライブラリ 処理対象:グラフィックス 使用ライブラリ:Graphicsクラス(System.Drawing名前空間) 使用ライブラリ:CopyPixelOperation列挙体(System.Drawing名前空間) 関連TIPS:アプリケーション画面のハードコピーを保存するには? 関連TIPS:ディスプレイの解像度を取得するには? 関連TIPS:クライアント領域やウィンドウ領域の座標を取得するには? 関連TIPS:スクリーン座標←→クライアント座標の変換を行うには? 関連TIPS:画像をファイルに保存するには? 関連TIPS:ほかのアプリケーションを実行するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




