vc MFC在opencv的Mat图像上显示中文:Mat转位MFC的CImage,画图写文字,再转回Mat
// Step 1 创建CImage获取dc
int iImgW = matImgSized.cols;
int iImgH = matImgSized.rows;
int iChannel = matImgSized.channels();
bool bCon = matImgSized.isContinuous();
CImage image;
image.Create(iImgW, iImgH, iChannel *8); // 24位BGR格式
cv::Mat matBGR;
cv::cvtColor(matImgSized, matBGR, cv::COLOR_BGR2RGB); // OpenCV默认BGR,MFC需要RGB
//memcpy(image.GetBits(), matBGR.data, iImgW * iImgH * 3);
BYTE* pBits = (BYTE*)image.GetBits();
int pitch = image.GetPitch();
for (int y = 0; y < iImgH; y++)
{memcpy(pBits + y * pitch, matBGR.data + y * matBGR.step, iImgW * 3);
}
// Step 2: 创建内存DC并绘制文字
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap* pOldBitmap = dc.SelectObject(CBitmap::FromHandle(image));
// 在dc上画图或者写文字
…
…
// Step 3: 将 CImage 数据写回 cv::Mat
for (int y = 0; y < iImgH; y++)memcpy(matBGR.data + y * matBGR.step,pBits + y * pitch, iImgW * 3);
cv::cvtColor(matBGR, matImgSized, cv::COLOR_RGB2BGR); // 转换回BGR格式