「ディスプレイキャプチャー あれ」でディスプレイの画像をAVIで保存するための流れは大体以下のようになっています。では、それぞれの段階について説明していきます。
1.画像を保存していくAVIファイルを作成する ↓ _→ 2.ディスプレイの状態を取得する ↑繰り返し ↓ _← 3.取得した画像をAVIファイルに追加する ↓ 4.AVIファイルを閉じて追加できないようにする
小紅はAVIファイルを作るためにEasyAVIという、自作のクラスを使用しています。
このクラスの入ったヘッダファイルは「ディスプレイキャプチャー あれ」に、おまけとして収録してあるので使用してみてください。
なお、このクラスの中身に関する説明は面倒くさいので割愛します。
このクラスを使用するには、まず
と、所定のヘッダファイルをインクルードする必要があります。
#include "EasyAVI.h"
ちなみにこのヘッダファイルではコメントを使ってと、"Vfw32.lib"をリンクしている行がありますが、コンパイラによってはこの命令が使用できませんので、ここの行でエラーが出る場合はこの行を消し、手動でリンクを設定してください。
#pragma comment(lib,"Vfw32.lib")
次にEasyAVIクラスを用いて画像保存用のAVIファイルを作る方法です。
ファイルを作りたい部分で超簡単ですね。
//EasyAVI *_easyavi;
//HDC _hMemDC;
//これらは後でも使用するので、
//グローバル変数としてあらかじめ宣言しておくのがいいです。
_easyavi = new EasyAVI();
//録画開始
_hMemDC = _easyavi->Start(NULL,);
幅,
高さ,
ファイル名,
スケール,
レート
if(_hMemDC==NULL){//失敗したときの処理を行う}
delete _easyavi;
この2つは一続きの処理なので、一緒に説明します。
ソースは以下のようになります。
ちなみにソース中の_hMemDCと_easyaviは 1. で使用したものと同じグローバル変数です。
HDC hDC;
int s;
//ディスプレイのデバイスコンテキストハンドルを取得
if((hDC=GetDC(NULL))==NULL)return;
if((s=SetStretchBltMode(hDC,HALFTONE))==0){//伸縮モードの設定に失敗したときの処理を書きます}
ReleaseDC(NULL,hDC);
return;
if(!StretchBlt(_hMemDC,}
0,
0,
AVIの幅,
AVIの高さ,,
hDC,
取得範囲の左上のX座標,
取得範囲の左上のY座標,
取得範囲の幅,
取得範囲の高さ,
SRCCOPY
)){
//HDCの貼り付けに失敗したときの処理を書きます
SetStretchBltMode(hDC,s);
ReleaseDC(NULL,hDC);
return;
SetStretchBltMode(hDC,s);
ReleaseDC(NULL,hDC);
//_hMemDCの中身をAVIファイルに追加します
_easyavi->Save();
この処理は定期的に行うわけですから、タイマーイベントを使用するのがよいかもしれません。
EasyAVIクラスを使用している場合はと、メモリを開放すれば勝手に閉じるように作ってあるので安心です。
delete _easyavi;