如何使用C ++

时间:2016-08-29 12:23:13

标签: c++ windows visual-studio-2010

目前我正在使用放大图库来捕捉屏幕。一旦放大回调调用,我试图将位图数据保存到文件。但是保存到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进行屏幕捕获?

提前致谢。

0 个答案:

没有答案