После получения образца из кадра в видео
я пишу * .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, или я могу изменить некоторые настройки.
Задача ещё не решена.
Других решений пока нет …