vs2013 MFC 添加图片出现的问题 总结:

vs2013 MFC 添加图片出现的问题 总结:


1.添加bmp文件,可能找不到bmp位图,只显示icon图片,此时需要选择“所有文件”,再导入。(vs2013的一个bug,vs2012不存在)


另一种方法是在“画图”中全选位图,复制到vs端新建位图中,但分辨率不高。


注:图片控件属性设置 Center Image True,才能改变控件大小


2.关键问题:载入bmp后,运行时报错:error RC2108: expected numerical dialog constant

<span style="font-size:18px;">CONTROL         IDB_BITMAP1,IDC_STATIC,2,2,89,82,NOT WS_GROUP //<span style="font-family: Arial, Helvetica, sans-serif;">的问题,</span></span>
<span style="font-size:18px;">改为:CONTROL         IDB_BITMAP1, IDC_STATIC, "Static", SS_BITMAP, 2, 2, 89, 82, NOT WS_GROUP</span>


但rc文件不能保存,每次打开都需要写入:"Static", SS_BITMAP

为此可以在onPaint函数中加入:

CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC_Picture); // 得到 Picture Control 句柄
pWnd->ModifyStyle(0, SS_BITMAP); // 修改它的属性为位图

参考:https://social.msdn.microsoft.com/Forums/zh-CN/1057c64a-8a22-46d4-a723-7aeaa5164e58/vs2013-picture-control-breaks-when-displaying-bitmap-ie-error-rc2108-expected-numerical?forum=vcgeneral


另,载入icon不存在问题,但大小好像不能调节(网上对icon转换工具为64*64,128*128等正方形,适用性不好)

发布了11 篇原创文章 · 获赞 5 · 访问量 1万+
展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

我用VS2015+MFC+Opencv3.0进行图像操作再显示到picture控件上出现了一些问题

10-24

这是点击按钮的响应函数 void CCrazyDlg::OnBnClickedOk() { CString FilePath; CFileDialog FileDlg(TRUE); if (IDOK == FileDlg.DoModal()) { //获取FileOpen对话框返回的路径名 FilePath = FileDlg.GetPathName(); //GetPathName返回的是CString类型,要经过转换为string类型才能使用imread打开图片 //std::string pathName(FilePath.GetBuffer()); std::string tempName = (LPCSTR)CStringA(FilePath); const char*pathName = tempName.c_str(); Mat bin; //读取图片 Mat im = imread(pathName); // 读图,并转化为灰度图 threshold(im, bin, 120, 255, CV_THRESH_BINARY | THRESH_OTSU); //显示图片 ShowMat(bin, GetDlgItem(IDC_SHOW)->GetSafeHwnd()); } } 这是ShowMat 函数 int CCrazyDlg::ShowMat(Mat img, HWND hWndDisplay) { if (img.channels()<3) { return -1; } //构造将要显示的Mat版本图片 RECT rect; ::GetClientRect(hWndDisplay, &rect); Mat imgShow(abs(rect.top - rect.bottom), abs(rect.right - rect.left), CV_8UC3); resize(img, imgShow, imgShow.size()); //在控件上显示要用到的CImage类图片 ATL::CImage CI; int w = imgShow.cols;//宽 int h = imgShow.rows;//高 int channels = imgShow.channels();//通道数 CI.Create(w, h, 8 * channels); //CI像素的复制 uchar *pS; uchar *pImg = (uchar *)CI.GetBits();//得到CImage数据区地址 int step = CI.GetPitch(); for (int i = 0; i<h; i++) { pS = imgShow.ptr<uchar>(i); for (int j = 0; j<w; j++) { for (int k = 0; k<3; k++) *(pImg + i*step + j * 3 + k) = pS[j * 3 + k]; //注意到这里的step不用乘以3 } } //在控件显示图片 HDC dc; dc = ::GetDC(hWndDisplay); CI.Draw(dc, 0, 0); ::ReleaseDC(hWndDisplay, dc); CI.Destroy(); return 0; } 我调试到threshold()那里就停止运行,错误信息是0x7734C42D 处(位于 Crazy.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0039DFB4 处。求解释,我困扰了好久了 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览