背景錯誤的原因是:我使用OpenCV2庫在我的MFC應用程序和的SetDIBitsToDevice顯示每個圖像。我的問題是,下面的代碼適用於90%的圖像文件,但不適用於某些旋轉的圖像,因爲我不知道。 Whole description of the issue is here我怎樣才能找到時的SetDIBitsToDevice返回錯誤代碼(0)
所以我需要找出爲什麼函數返回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);
}
使用GetLastError()。 – 2011-12-21 17:51:09
@HansPassant謝謝。有趣的是,當我使用FormatMessage將函數中的值轉換爲字符串消息時,我得到了「操作成功完成」,這是不正確的。 – 2011-12-21 18:09:40
一個常見的錯誤是調用其他一些獲取錯誤代碼的winapi函數。立即調用並將返回值存儲在局部變量中。 – 2011-12-21 18:11:24