通过远程桌面编写位图

时间:2012-11-01 19:29:30

标签: c++ remote-desktop bmp

从视频中的帧中获取样本后 我用下一个c ++代码写一个* .bmp文件:

RETVAL Cbmp::WriteBitmapToFile(char *pcFileName,
                               unsigned char  *pucBGRImg, 
                               unsigned short usWidth,
                               unsigned short usHeight)
{
FILE *fp;
BITMAPINFO bmi;
LONG lStride;
BITMAPFILEHEADER bfi = {0};
LARGE_INTEGER lgbeginning = {0};

if(!pcFileName || !pucBGRImg)
{
    return NULL_POINTER;
}

bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biBitCount = ::GetDeviceCaps(::GetDC(NULL),BITSPIXEL);
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biWidth  = usWidth;
bmi.bmiHeader.biHeight  = usHeight;

lStride = ( bmi.bmiHeader.biWidth * bmi.bmiHeader.biBitCount / 8 + sizeof(DWORD) ) & ~sizeof(DWORD);
bmi.bmiHeader.biSizeImage = lStride * bmi.bmiHeader.biHeight;

bfi.bfSize = sizeof(bfi) + sizeof(BITMAPINFO) + bmi.bmiHeader.biSizeImage;
bfi.bfType = 0x4d42;        // 0x42 = "B" 0x4d = "M" 
bfi.bfOffBits = sizeof(bfi) + sizeof(BITMAPINFO);

fp = fopen(pcFileName, "wb");
if (!fp)
{
    return CANT_OPEN_PATH;
}
fwrite(&bfi, sizeof(bfi), 1, fp); 
fwrite(&bmi, sizeof(BITMAPINFO), 1, fp); 
fwrite(pucBGRImg, bmi.bmiHeader.biSizeImage,1, fp);
fclose(fp);

return SUCCESS;
} //end of WriteBitmapToFile

一切都很好 直到一些用户发现了一个bug, 当他们使用Microsoft远程桌面(mstsc)时会发生这种情况。

当他们点击保存位图按钮时,文件被保存为已损坏 然后无法通过我的专辑屏幕查看

我注意到它只在从win XP机器连接时发生

我不知道问题是否是因为我正在写文件的方式 或者,如果它是Win XP错误,或者可以通过某些设置我可以更改。

0 个答案:

没有答案