如何创建一个波形显示

该博客主要介绍了创建波形显示器的步骤。从CWnd继承一个类,定义相关函数和变量,如设置位置、范围、绘制波形条等函数,以及范围、位置等变量。还包含初始化数据、注册应用类、设置动态位置和范围等操作,最终实现波形显示器的绘制。

1>目的:创建一个波形显示器
2>步骤:*从CWnd继承一个类,包含四个函数分别是:UINT SetPos(UINT nPos) ,设置位置点;void
         SetRange(UINT nLower,UINT nUpper),设置波形条高度范围;绘制波形条void DrawBar();
  更新绘制void InvalidateCtrl();重载virtual BOOL Create(LPCTSTR lpszClassName,
         LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
         UINT nID, CCreateContext* pContext = NULL);映射afx_msg void OnPaint()消息函数。
       
        *定义五个变量UINT m_nVertical;范围最小值UINT  m_nLower;范围最大值UINT  m_nUpper;
  位置UINT  m_nPos;设备CDC m_MemDC;位图CBitmap m_Bitmap;
        
        *初始化数据
CAduioShow::CAduioShow()
      {
 file://初始化数据 高为100,底为0,开始点为0
 m_nPos=0;
 m_nLower=0;
 m_nUpper=100;
      }

       *//下面注册应用类,风格设置为如果窗口的高,宽改变时从绘制整个窗口
BOOL CAduioShow::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const
                        RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
 // TODO: Add your specialized code here and/or call the base class
 file://下面注册类,风格设置为如果窗口的高,宽改变时从绘制整个窗口
 static CString  classname=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW);
      
 return CWnd::CreateEx(WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,classname,NULL,
                    dwStyle,rect.left,rect.top,rect.right-rect.left,
        rect.bottom-rect.top,
                              pParentWnd->GetSafeHwnd(),(HMENU)nID);
file://(HMENU)nID为程序中的图片框id


}

 

      *设置变动条的动态位置,并返回初始位置
UINT  CAduioShow::SetPos(UINT nPos)
{
 file://下面设置位置最大及最小值
 if (nPos>m_nUpper)
  nPos=m_nUpper;
 if(nPos<m_nLower)
        nPos=m_nLower;

 UINT nOld=m_nPos;
      m_nPos=nPos;
    file://绘制变动条
   DrawBar();
  
   Invalidate();;

   return nOld;
}

      *设置变动条的范围
void CAduioShow::SetRange(UINT nLower,UINT nUpper)
{
 m_nLower=nLower;
 m_nUpper=nUpper;

 InvalidateCtrl();
}
 
     *变换坐标
void CAduioShow::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 
 // TODO: Add your message handler code here
 CRect rcClient;
 GetClientRect(rcClient);

 if(m_MemDC.GetSafeHdc()!=NULL)
 {
  dc.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&m_MemDC,0,0,SRCCOPY);
 }

 // Do not call CWnd::OnPaint() for painting messages
}

 

      *绘制条形图
void CAduioShow::DrawBar()
{
 UINT nRange=m_nUpper-m_nLower;
 CRect reClient;
 GetClientRect(reClient);

 if(m_MemDC.GetSafeHdc()!=NULL)
 {
  m_MemDC.BitBlt(0,0,reClient.Width(),reClient.Height(),&m_MemDC,4,0,SRCCOPY);

                CRect reTop(reClient.right-4,0,reClient.right-2,reClient.bottom);
                file://计算条形图的高度
  reTop.top =(long)(((float)(m_nPos-m_nLower)/nRange)*reClient.Height());
                file://计算条形图的宽度
  CRect reRight=reClient;
        reRight.left=reRight.right-4;
                file://绘
        CBrush   bkBrush(HS_HORIZONTAL,RGB(0,128,128));
  m_MemDC.FillRect(reRight,&bkBrush);
       
  CBrush   bBrush(RGB(0,255,0));
  m_MemDC.FillRect(reTop,&bBrush);
 }

}

       *
void CAduioShow::InvalidateCtrl()
{
 CClientDC dc(this);
 CRect reClient;
 GetClientRect(reClient);
         file://无效更新
 if(m_MemDC.GetSafeHdc()==NULL)
 {
  m_MemDC.CreateCompatibleDC(&dc);
  m_Bitmap.CreateCompatibleBitmap(&dc,reClient.Width(),reClient.Height());
  m_MemDC.SelectObject(m_Bitmap);
  m_MemDC.SetBkColor(RGB(0,0,0));
  CBrush bkBrush(HS_HORIZONTAL,RGB(0,128,0));
  m_MemDC.FillRect(reClient,&bkBrush);
 }
 InvalidateRect(reClient);

}

 


 

训练数据保存为deep_convnet_params.pkl,UI使用wxPython编写。卷积神经网络(CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,在计算机视觉、语音识别、自然语言处理等多个领域有广泛应用。其核心设计理念源于对生物视觉系统的模拟,主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。 **1. 局部感知与卷积操作** 卷积层是CNN的基本构建块,使用一组可学习的滤波器对输入图像进行扫描。每个滤波器在图像上滑动,以局部区域内的像素值与滤波器权重进行逐元素乘法后求和,生成输出值。这一过程能够捕获图像中的边缘、纹理等局部特征。 **2. 权重共享** 同一滤波器在整个输入图像上保持相同的权重。这显著减少了模型参数数量,增强了泛化能力,并体现了对图像平移不变性的内在假设。 **3. 池化操作** 池化层通常紧随卷积层之后,用于降低数据维度并引入空间不变性。常见方法有最大池化和平均池化,它们可以减少模型对微小位置变化的敏感度,同时保留重要特征。 **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起。随着网络深度增加,每一层逐渐提取更复杂、更抽象的特征,从底层识别边缘、角点,到高层识别整个对象或场景,使得CNN能够从原始像素数据中自动学习到丰富的表示。 **5. 激活函数与正则化** CNN中使用非线性激活函数来引入非线性表达能力。为防止过拟合,常采用正则化技术,如L2正则化和Dropout,以增强模型的泛化性能。 **6. 应用场景** CNN在诸多领域展现出强大应用价值,包括图像分类、目标检测、语义分割、人脸识别、图像生成、医学影像分析以及自然语言处理等任务。 **7. 发展与演变** CNN的概念起源于20世纪80年代,其影响力在硬件加速和大规模数据集出现后真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构推动了CNN技术的快速发展。如今,CNN已成为深度学习图像处理领域的基石,并持续创新。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值