LRESULT CMainFrame::OnSnapChange(WPARAM wParam, LPARAM lParam) { HVSTATUS status = STATUS_OK; CView *pView = GetActiveView(); //获取当前VIEW视图 CDC *pDC = pView->GetDC(); //得到VIEW的DC // 将原始图像数据进行Bayer转换,转换后为24位。 ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType,m_pLutR,m_pLutG,m_pLutB,true,Layout); //同时将原始数据进行上下翻转 Resize(); //在视图客户区显示图像 StretchDIBits(pDC->GetSafeHdc(), 0, 0, Width/2, //显窗口宽度 Height/2, //显示窗口高度 0, 0, Width/2, //图像宽度 Height/2, //图像高度 DisplayBuffer, //图像缓冲区 m_pBmpInfo, //BMP图像描述信息 DIB_RGB_COLORS, SRCCOPY ); pView->ReleaseDC(pDC); return 1; }
IplImage* HV_Camera::HV_QueryFrame() { IplImage* Pimage; HVSTATUS status = STATUS_OK; CString strMsg; //只定义一个缓冲区来保存图象数据 BYTE *ppBuf[1]; ppBuf[0] = m_pRawBuffer; status = HVSnapShot(m_hhv, ppBuf, 1); if (STATUS_OK < status || status < STATUS_INTERNAL_ERROR) { CString str=""; str.Format("Error : 0x%08x",status); ::MessageBox(NULL, str , "Error", MB_ICONWARNING | MB_OK); }else{ HV_VERIFY(status); } // 将原始图像数据进行Bayer转换,转换后为24位。 //同时将原始数据进行上下翻转 ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType, m_pLutR,m_pLutG,m_pLutB,true,m_Layout); Pimage = Byte2IplImg(m_pImageBuffer, Width ,Height ); return Pimage; }
/**************************************************************************** 说明 将内存m_pImageBuffer 转换 Mat ****************************************************************************/ cv::Mat HV_Camera::getmat() { ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType, m_pLutR,m_pLutG,m_pLutB,false,m_Layout); IplImage* Pimage; Pimage = Byte2IplImg(m_pImageBuffer, Width ,Height ); cv::Mat mat(Pimage); return mat; }
/**************************************************************************** 说明 将内存m_pImageBuffer 转换 CImage ****************************************************************************/ int HV_Camera::getcimage(ATL::CImage &CI) { ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType, m_pLutR,m_pLutG,m_pLutB,false,m_Layout); CI.Create( Width , -Height, 8*3);// If Height is negative, the bitmap is a top-down DIB and its origin is the upper left corner. uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址 memcpy(pImg,m_pImageBuffer,Width*Height*3); //int step=CI.GetPitch(); //for(int i=0;i<Height;i++) //{ // //pS=imgShow.ptr<uchar>(i); // for(int j=0;j<Width;j++) // { // for(int k=0;k<3;k++) // *(pImg+i*step+j*3+k)=m_pImageBuffer[i*(step)+j*3+k]; // } //} return 1; }