Webcam Win32 アプリケーションで一度に複数の写真を保存しようとしています。つまり、ある写真を保存してから別の写真を保存するなどです。
これを行うために、文字列を整数変数に追加して、新しい写真の名前がそれぞれ一意になり、CreateBMPFile の 2 番目の引数の形式に準拠できるようにします。これは通常、TEXT("stringliteral") を記述する場合ですが、新しい写真が作成されるたびにファイル名を変更し続ける必要があります。
PBITMAPINFO pbi = CreateBitmapInfoStruct(hwnd, hbm);
int i = 1;
std::string image = "..\\..\\..\\..\\WebCam\\frame" + std::to_string(i) + ".bmp";
while (!exists(image)) {
LPTSTR filename = (LPTSTR)image.c_str();
CreateBMPFile(hwnd, filename, pbi, hbm, hdcMem);
i++;
}
これはコンパイルおよび実行されますが、[Grab Frame] ボタンをクリックして保存しようとすると、アプリケーションがクラッシュします。つまり、GUI が表示されなくなり、プロセスが停滞します。
ファイルがシステムに存在するかどうかを確認するために、exists() 関数を使用しています。
inline bool exists(const std::string& name) {
struct stat buffer;
return (stat(name.c_str(), &buffer) == 0);
}
sprintf_s() も使用してみましたが、同じ結果でアプリケーションがクラッシュしました。