当前位置: 首页 > news >正文

mfc 动态加载dll库,Mat转CImage,读ini配置文件,鼠标操作,在edit控件上画框,调试信息打印

动态加载dll库

h文件中添加

#include "mydll.h"
#ifdef UNICODE  //区分字符集
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODEtypedef double(*mydllPtr)(int, int);类内添加:
mydllPtr m_mydll; 

cpp文件中添加

初始化函数中添加:HMODULE m_loadDll = LoadLibrary(TEXT("mydll.dll"));
if (m_loadDll == NULL)AfxMessageBox("mydll.dll load error.");//m_mydll对应dll库中的mydll函数
m_mydll = (mydllPtr)GetProcAddress(m_loadDll, "mydll");使用时:
m_mydll(int, int);

Mat转CImage,播放视频

//函数
void MatToCImage(Mat& mat, CImage& cimage)
{if (0 == mat.total()){return;}int nChannels = mat.channels();if ((1 != nChannels) && (3 != nChannels)){return;}int nWidth = mat.cols;int nHeight = mat.rows;//重建cimagecimage.Destroy();cimage.Create(nWidth, nHeight, 8 * nChannels);//拷贝数据uchar* pucRow;									//指向数据区的行指针uchar* pucImage = (uchar*)cimage.GetBits();		//指向数据区的指针int nStep = cimage.GetPitch();					//每行的字节数,注意这个返回值有正有负if (1 == nChannels)								//对于单通道的图像需要初始化调色板{RGBQUAD* rgbquadColorTable;int nMaxColors = 256;rgbquadColorTable = new RGBQUAD[nMaxColors];cimage.GetColorTable(0, nMaxColors, rgbquadColorTable);for (int nColor = 0; nColor < nMaxColors; nColor++){rgbquadColorTable[nColor].rgbBlue = (uchar)nColor;rgbquadColorTable[nColor].rgbGreen = (uchar)nColor;rgbquadColorTable[nColor].rgbRed = (uchar)nColor;}cimage.SetColorTable(0, nMaxColors, rgbquadColorTable);delete[]rgbquadColorTable;}for (int nRow = 0; nRow < nHeight; nRow++){pucRow = (mat.ptr<uchar>(nRow));for (int nCol = 0; nCol < nWidth; nCol++){if (1 == nChannels){*(pucImage + nRow * nStep + nCol) = pucRow[nCol];}else if (3 == nChannels){for (int nCha = 0; nCha < 3; nCha++){*(pucImage + nRow * nStep + nCol * 3 + nCha) = pucRow[nCol * 3 + nCha];}}}}}//使用
CRect rect;
GetDlgItem(IDC_STATIC_SHOW)->GetClientRect(&rect);
CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
pDc->SetStretchBltMode(COLORONCOLOR);
CImage image;
MatToCImage(mat, image);
image.Draw(pDc->m_hDC, rect); 

读ini配置文件

CString m_serialPort;
GetPrivateProfileString("test", "com", "", m_serialPort.GetBuffer(100), 100, "./config.ini");config.ini文件
[test]
com=3

鼠标操作

左键按下弹起,右键按下弹起

h文件类内添加:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);cpp文件中添加:BEGIN_MESSAGE_MAP(CIRCameraDemo_chaojingDlg, CDialogEx)...ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_RBUTTONDOWN()...
END_MESSAGE_MAP()void CIRCameraDemo_chaojingDlg::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnLButtonDown(nFlags, point);
}void CIRCameraDemo_chaojingDlg::OnLButtonUp(UINT nFlags, CPoint point)
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnLButtonUp(nFlags, point);
}void CIRCameraDemo_chaojingDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加控件通知处理程序代码CDialogEx::OnRButtonDown(nFlags, point);
}

在Edit控件上画框

CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
CBrush *pOldBrush = (CBrush*)pDc->SelectStockObject(NULL_BRUSH);
CPen *pen = new CPen(PS_SOLID, 5, RGB(255, 0, 0));
CPen *pOldPen = pDc->SelectObject(pen);
pDc->Rectangle(CRect(m_startPoint, m_stopPoint));
pDc->SelectObject(pOldPen);
pDc->SelectObject(pOldBrush);
delete pen;

调试信息打印到输出界面

TRACE("temp= %d\n", temp);

http://www.lryc.cn/news/181350.html

相关文章:

  • 索尼 toio™应用创意开发征文|检测工业平台震动
  • 【已解决】 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘.
  • Java8 Lambda.stream.sorted() 方法使用浅析分享
  • Neural Networks for Fingerprint Recognition
  • ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯
  • Java 实现遍历一个文件夹,文件夹有100万数据,获取到修改时间在2天之内的数据
  • 持续集成部署-k8s-命令行工具:基础命令的使用
  • 使用python脚本的时间盲注完整步骤
  • C++项目:仿mudou库one thread one loop式并发服务器实现
  • 【算法训练-贪心算法 一】买卖股票的最佳时机II
  • 单阶段目标检测与双阶段目标检测的联系与区别
  • Mysql技术文档--设计表规范式-一次性扫盲
  • python socket 传输opencv读取的图像
  • APACHE NIFI学习之—UpdateAttribute
  • BIT-7文件操作和程序环境(16000字详解)
  • 冥想第九百二十八天
  • 深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)
  • Lucene-MergePolicy详解
  • 数据的加解密
  • 【Spring】更简单的读取和存储对象
  • 【LeetCode热题100】--108.将有序数组转换为二叉搜索树
  • Redis学习笔记(下):持久化RDB、AOF+主从复制(薪火相传,反客为主,一主多从,哨兵模式)+Redis集群
  • 【智能家居项目】裸机版本——设备子系统(LED Display 风扇)
  • [Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案
  • 【计算机网络】高级IO之select
  • 如何设计一个高效的应用缓冲区【一个动态扩容的buffer类】
  • 图像处理初学者导引---OpenCV 方法演示项目
  • 管道-匿名管道
  • 【JavaEE基础学习打卡08】JSP之初次认识say hello!
  • 使用序列到序列深度学习方法自动睡眠阶段评分