написание растрового изображения через удаленный рабочий стол

После получения образца из кадра в видео
я пишу * .bmp файл со следующим кодом C ++:

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

Все работало очень хорошо
пока некоторые пользователи не обнаружили ошибку,
это происходит, когда они используют удаленный рабочий стол Microsoft (mstsc).

когда они нажимают кнопку сохранения растрового изображения, файл сохраняется поврежденным
и тогда не может быть просмотрен на экране моего альбома

Я заметил, что это происходит только при подключении с машины Win XP

Я не знаю, если проблема в том, как я пишу файл
или, если это ошибка Win XP, или я могу изменить некоторые настройки.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …