Фон: Я использую библиотеку OpenCV2 в своем приложении MFC и SetDIBitsToDevice для отображения каждого изображения. Моя проблема в том, что следующий код работает с 90% файлов изображений, но не работает с определенными повернутыми изображениями по причине, которую я не знаю. Полное описание проблемы здесь
Итак, мне нужно выяснить, почему функция возвращает 0 код ошибки для изображений и какую ошибку я получаю от функции.
Согласно MSDN
Если установлены нулевые линии сканирования (например, когда dwHeight равен 0) или
Сбой функции, функция возвращает ноль.
Итак, если функция возвращает ноль, как я могу найти подробности ошибки?
ОБНОВЛЕНИЕ: Я пытался использовать GetLastError () следующим образом. Но на самом деле сообщение было «Операция завершена успешно», что, конечно, неверно. Буду признателен за любую подсказку или совет для решения этой проблемы.
BITMAPINFO* bmi = (BITMAPINFO* )buffer;
FillBitmapInfo(bmi,width,height,Bpp(pDoc->m_cvImage),0);
int result = SetDIBitsToDevice(pDC->GetSafeHdc(), 100, 100, width,
height, 0, 0, 0, height, pDoc->m_cvImage.data, bmi,
DIB_RGB_COLORS);
if(result==0) {
DWORD error = GetLastError();
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
CString text;
// Process any inserts in lpMsgBuf.
text= (LPCTSTR)lpMsgBuf;
// Free the buffer.
LocalFree( lpMsgBuf );
int nResult = AfxMessageBox(text, MB_OK);
}