目前我正在使用放大图库来捕捉屏幕。一旦放大回调调用,我试图将位图数据保存到文件。但是保存到bmp文件有时需要60毫秒,有时是130毫秒,所以目前我无法获得所需的FPS(要求是25-30 FPS但只能获得6-10 FPS)。
甚至我试图将数组数据存储到BYTE向量的std :: queue。由于我的笔记本电脑具有全高清分辨率(1920 X 1080),几乎可以提供8 MB的位图阵列数据,因此我仍处于发布模式,因此我只能获得6-10 FPS。
以下是将位图数组保存到文件的代码。
void SaveBmpToFile(BITMAPINFOHEADER bmif, BYTE *pData, wstring fileName)
{
// Setup the bitmap file header
BITMAPFILEHEADER bmfh;
LONG offBits = sizeof(BITMAPFILEHEADER) + bmif.biSize;
bmfh.bfType = 0x4d42; // "BM"
bmfh.bfOffBits = offBits;
bmfh.bfSize = offBits + bmif.biSizeImage;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
// Create the file in disk to write
HANDLE hFile = CreateFile(fileName.c_str(),
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
// Return if error opening file
if (!hFile) return;
DWORD dwWritten = 0;
// Write the File header
WriteFile(hFile,
&bmfh,
sizeof(bmfh),
&dwWritten,
NULL);
// Write the bitmap info header
WriteFile(hFile,
&bmif,
sizeof(bmif),
&dwWritten,
NULL);
// Write the RGB Data
WriteFile(hFile,
pData,
bmif.biSizeImage,
&dwWritten,
NULL);
// Close the file handle
CloseHandle(hFile);
}
以下是我尝试使用队列来保存数据的方法。
vector<vector<BYTE>> vecBMPData; //queue declaration
vector<BYTE> videoSample(pData, pData + bmif.biSizeImage);
vecBMPData.push_back(videoSample);
即使我尝试使用命名管道,但仍然因为将数据保存到文件而导致同样的问题。
操作系统:Windows 10 64位,使用Visual Studio 2010 C ++。
请问有人告诉我如何将位图数组数据保存到文件中更快,这样我就可以获得所需的FPS进行屏幕捕获?
提前致谢。