안녕하세요 opencv를 mfc에서 구현하는것을 공부하다가
문제점이 생겨 글을 남깁니다.
이미지 불러오기를 통해 이미지를 picture control에 리사이즈해 출력을 하면
아래 사진과 같이 이미지가 깨져 나옵니다.
imshow로 새창에서 열어보면 정상적인 이미지가 출력되는반면
picture control상에서는 깨져서 보이네요...
관련정보를 찾다가 나오질 않아 글을 올리게 되었습니다.
아래 현상 사진과 코드 첨부합니다.
봐주셔서 감사합니다.
void COpenCVTest1Dlg::OnBnClickedBtnTest()
{
char szFilter[] = "Image (*.BMP, *.GIF, *.JPG, *.PNG) | *.BMP;*.GIF;*.JPG;*.PNG;*.bmp;*.gif;*.jpg;*.png | All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, AfxGetMainWnd());
if (dlg.DoModal() == IDOK)
{
cstrtargetPath1 = dlg.GetPathName();
src1 = imread(string(cstrtargetPath1));
// resize image
Size dSize;
dSize.width = m_src1.cols;
dSize.height = m_src1.rows;
resize(src1, m_src1, dSize, 0, 0, INTER_LINEAR);
imshow("Test2", m_src1);
// Mat to Bitmap
HDC hdc = GetDlgItem(IDC_PIC_TEST)->GetDC()->m_hDC;
char m_chBmpBuf[2048];
BITMAPINFO *m_pBmpInfo = 0;
m_pBmpInfo = (BITMAPINFO *)m_chBmpBuf;
m_pBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_pBmpInfo->bmiHeader.biWidth = m_src1.cols;
m_pBmpInfo->bmiHeader.biHeight = -(m_src1.rows); // -를 넣지 않으면 x축이 반전되어 디스플레이 된다. 이미지는 정상적이므로 걱정하지 말자.
m_pBmpInfo->bmiHeader.biBitCount = 24;
m_pBmpInfo->bmiHeader.biPlanes = 1;
m_pBmpInfo->bmiHeader.biCompression = BI_RGB;
m_pBmpInfo->bmiHeader.biSizeImage = 0;
m_pBmpInfo->bmiHeader.biXPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biYPelsPerMeter = 0;
m_pBmpInfo->bmiHeader.biClrUsed = 0;
m_pBmpInfo->bmiHeader.biClrImportant = 0;
StretchDIBits(hdc, 0, 0, m_src1.cols, m_src1.rows,
0, 0, m_src1.cols, m_src1.rows,
m_src1.data, m_pBmpInfo,
DIB_RGB_COLORS, SRCCOPY);
Invalidate(FALSE);
}
}
** 이 게시판은 댓글이 달리면 게시물을 삭제할 수 없습니다. **
** 내용의 장기노출이 곤란한 경우 [수정]을 통해 내용을 변경하시기 바랍니다. **
또는 4-byte alignment 와 관련된 것도 같네요.