【发布时间】:2014-11-07 23:49:14
【问题描述】:
我在相机采集循环中有这段代码:
CBitmap* bmp = new CBitmap();
CDC* pDC;
CBitmap* old;
CDC* memDC = new CDC();
pDC = pLiveImageDlg->GetDC();
bmp->CreateCompatibleBitmap(pDC, 640, 480);
memDC->CreateCompatibleDC(pDC);
old = memDC->SelectObject(bmp);
bmp->SetBitmapBits(640 * 480 * 3, frame.data);
pDC->BitBlt(0, 0, 640, 480, memDC, 0, 0, SRCCOPY);
memDC->SelectObject(old);
我的问题是,在查看绘制到对话框上的位图时,它看起来完全扭曲且单色。通常,图像失真意味着像素索引已关闭(颜色格式错误等)。 “frame”变量是一个 OpenCV Mat 对象,它以 24 位 RGB 格式抓取图像(使用imshow() 显示颜色非常好)。我觉得单色问题与 CreateCompatibleDC 函数调用有关,因为根据 MSDN 文档,默认情况下它会创建一个 1x1 单色像素......而且这个单色问题可能导致“像素字节数组偏移”问题.
将位图以 24 位 RGB 位图的形式显示在屏幕上的正确方法是什么?
【问题讨论】:
-
没有理由做
new CBitmap()或new CDC(),除非对象的生命周期超过了它们被实例化的函数。 -
不要直接绘制到对话框的 DC。在对话框中放置一个控件,并让控件显示位图。
-
图像宽度应为 % 4。所以:640 可以 / 641,642,643 否 / 644 可以 / 依此类推...
标签: c++ opencv visual-c++ bitmap mfc