399 lines
9.5 KiB
C++
399 lines
9.5 KiB
C++
|
// PictureView.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "resource.h"
|
|||
|
#include "FastView.h"
|
|||
|
#include "DahuaFisheyeCamera.h"
|
|||
|
#include "HikRgdbCamera.h"
|
|||
|
|
|||
|
//ͼ<><CDBC><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
enum
|
|||
|
{
|
|||
|
IMG_SIZE_NORMAL, //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE>ڻ<EFBFBD>ͼ<EFBFBD><CDBC>Χ<EFBFBD><CEA7>
|
|||
|
IMG_SIZE_WIDTH_BEYOND, //<2F><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Χ
|
|||
|
IMG_SIZE_HEIGHT_BEYOND, //<2F><>ͼ<EFBFBD><CDBC><EFBFBD>߶ȳ<DFB6><C8B3><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Χ
|
|||
|
IMG_SIZE_BOTH_BEYOND //ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>Χ
|
|||
|
};
|
|||
|
// CPictureView
|
|||
|
|
|||
|
IMPLEMENT_DYNAMIC(CFastView, CStatic)
|
|||
|
|
|||
|
CFastView::CFastView()
|
|||
|
{
|
|||
|
m_pCameraDlg = NULL;
|
|||
|
}
|
|||
|
|
|||
|
CFastView::~CFastView()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
BEGIN_MESSAGE_MAP(CFastView, CStatic)
|
|||
|
ON_WM_PAINT()
|
|||
|
ON_WM_SIZE()
|
|||
|
ON_WM_CTLCOLOR()
|
|||
|
ON_WM_RBUTTONUP()
|
|||
|
END_MESSAGE_MAP()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// CPictureView <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void CFastView::StartPlay(CString strFile)
|
|||
|
{
|
|||
|
StopPlay();
|
|||
|
m_Image.Destroy();
|
|||
|
ShowWindow(SW_SHOW);
|
|||
|
if (0 == strFile.GetLength())
|
|||
|
return;
|
|||
|
|
|||
|
m_Image.Load(strFile); //<2F><><EFBFBD><EFBFBD>ͼƬ·<C6AC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ
|
|||
|
DrawPicture();
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void CFastView::StopPlay()
|
|||
|
{
|
|||
|
m_Image.Destroy();
|
|||
|
UpdateWindow();
|
|||
|
ShowWindow(SW_HIDE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CFastView::CalculateImageRect()
|
|||
|
{ //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰͼ<C7B0><CDBC>Ϊ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>
|
|||
|
if (m_Image.IsNull())
|
|||
|
return;
|
|||
|
|
|||
|
CRect rectWnd;
|
|||
|
GetWindowRect(&rectWnd);
|
|||
|
int MemWidth = rectWnd.Width();
|
|||
|
int MemHeight = rectWnd.Height();
|
|||
|
|
|||
|
//m_ImageRect = CRect(0, 0, MemWidth, MemHeight); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//return;
|
|||
|
|
|||
|
//<2F><>ȡͼ<C8A1><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
CRect rectImg = CRect(0, 0, m_Image.GetWidth(), m_Image.GetHeight());
|
|||
|
|
|||
|
int ImgWidth = rectImg.Width();
|
|||
|
int ImgHeight = rectImg.Height();
|
|||
|
int nImgSizeType; //ͼ<><CDBC><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
//Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD>
|
|||
|
int nGap = 0;
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1>ǰͼ<C7B0><CDBC><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ((ImgWidth <= MemWidth - nGap) && (ImgHeight <= MemHeight - nGap))
|
|||
|
nImgSizeType = IMG_SIZE_NORMAL;
|
|||
|
else if ((ImgWidth>MemWidth - nGap) && (ImgHeight <= MemHeight - nGap))
|
|||
|
nImgSizeType = IMG_SIZE_WIDTH_BEYOND;
|
|||
|
else if ((ImgWidth <= MemWidth - nGap) && (ImgHeight>MemHeight - nGap))
|
|||
|
nImgSizeType = IMG_SIZE_HEIGHT_BEYOND;
|
|||
|
else
|
|||
|
nImgSizeType = IMG_SIZE_BOTH_BEYOND;
|
|||
|
|
|||
|
//<2F>Բ<EFBFBD>ͬ<EFBFBD><CDAC>ͼ<EFBFBD><CDBC><EFBFBD>ߴ磬<DFB4><E7A3AC><EFBFBD><EFBFBD>ͶӰ<CDB6><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
switch (nImgSizeType)
|
|||
|
{
|
|||
|
float fScaleW, fScaleH; //X<><58>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
|
|||
|
int nW, nH;
|
|||
|
//ֻ<>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ
|
|||
|
case IMG_SIZE_WIDTH_BEYOND:
|
|||
|
fScaleW = ((double)MemWidth) / ImgWidth;
|
|||
|
nW = MemWidth;
|
|||
|
nH = fScaleW*ImgHeight;
|
|||
|
m_ImageRect = CRect((MemWidth - nW) / 2 + nGap,
|
|||
|
(MemHeight - nH) / 2,
|
|||
|
(MemWidth + nW) / 2 - nGap,
|
|||
|
(MemHeight + nH) / 2);
|
|||
|
break;
|
|||
|
//ֻ<>и߳<D0B8><DFB3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ
|
|||
|
case IMG_SIZE_HEIGHT_BEYOND:
|
|||
|
fScaleH = ((double)MemHeight) / ImgHeight;
|
|||
|
nW = fScaleH*ImgWidth;
|
|||
|
nH = MemHeight;
|
|||
|
m_ImageRect = CRect((MemWidth - nW) / 2,
|
|||
|
(MemHeight - nH) / 2 + nGap,
|
|||
|
(MemWidth + nW) / 2,
|
|||
|
(MemHeight + nH) / 2 - nGap);
|
|||
|
break;
|
|||
|
//<2F><><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ<EFBFBD><CEA7>
|
|||
|
case IMG_SIZE_BOTH_BEYOND:
|
|||
|
case IMG_SIZE_NORMAL:
|
|||
|
fScaleW = ((double)MemWidth) / ImgWidth;
|
|||
|
fScaleH = ((double)MemHeight) / ImgHeight;
|
|||
|
float fScale = min(fScaleW, fScaleH);
|
|||
|
nW = fScale*ImgWidth;
|
|||
|
nH = fScale*ImgHeight;
|
|||
|
m_ImageRect = CRect((MemWidth - nW) / 2 + nGap,
|
|||
|
(MemHeight - nH) / 2 + nGap,
|
|||
|
(MemWidth + nW) / 2 - nGap,
|
|||
|
(MemHeight + nH) / 2 - nGap);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void CFastView::OnPaint()
|
|||
|
{
|
|||
|
CPaintDC dc(this); // device context for painting
|
|||
|
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><>Ϊ<EFBFBD><CEAA>ͼ<EFBFBD><CDBC>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> CStatic::OnPaint()
|
|||
|
if (FALSE == m_Image.IsNull())
|
|||
|
{
|
|||
|
CDC *pDC = GetDC();//<2F><><EFBFBD><EFBFBD>pictrue<75>ؼ<EFBFBD><D8BC><EFBFBD>DC
|
|||
|
//<2F><><EFBFBD><EFBFBD>CIMage<67><65><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
SetStretchBltMode(pDC->m_hDC, HALFTONE);
|
|||
|
SetBrushOrgEx(pDC->m_hDC, 0, 0, NULL);
|
|||
|
|
|||
|
|
|||
|
CRect rectWnd = { 0 };
|
|||
|
GetWindowRect(&rectWnd);
|
|||
|
//<2F>ػ<EFBFBD><D8BB><EFBFBD>ɫ
|
|||
|
pDC->FillSolidRect(CRect(0, 0, rectWnd.Width(), rectWnd.Height()), RGB(0, 0, 0));
|
|||
|
//m_Image.StretchBlt(pDC->GetSafeHdc(), m_ImageRect, CRect(0, 0, m_Image.GetWidth(), m_Image.GetHeight()));
|
|||
|
m_Image.Draw(pDC->m_hDC, m_ImageRect); //<2F><>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>Picture<72>ؼ<EFBFBD><D8BC><EFBFBD>ʾ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ReleaseDC(pDC);//<2F>ͷ<EFBFBD>picture<72>ؼ<EFBFBD><D8BC><EFBFBD>DC
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CFastView::OnSize(UINT nType, int cx, int cy)
|
|||
|
{
|
|||
|
CStatic::OnSize(nType, cx, cy);
|
|||
|
DrawPicture();
|
|||
|
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CFastView::DrawPicture()
|
|||
|
{
|
|||
|
if (FALSE == m_Image.IsNull())
|
|||
|
{
|
|||
|
CalculateImageRect();
|
|||
|
|
|||
|
if (m_ImageRect.Width() <= 0)
|
|||
|
return;
|
|||
|
|
|||
|
CDC *pDC = GetDC();//<2F><><EFBFBD><EFBFBD>pictrue<75>ؼ<EFBFBD><D8BC><EFBFBD>DC
|
|||
|
CRect rectWnd;
|
|||
|
GetWindowRect(&rectWnd);
|
|||
|
|
|||
|
//<2F>ػ<EFBFBD><D8BB><EFBFBD>ɫ
|
|||
|
//pDC->FillSolidRect(CRect(0, 0, rectWnd.Width(), rectWnd.Height()), RGB(0, 0, 0));
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>CIMage<67><65><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//SetStretchBltMode(pDC->m_hDC, HALFTONE);
|
|||
|
//SetBrushOrgEx(pDC->m_hDC, 0, 0, NULL);
|
|||
|
SetStretchBltMode(pDC->m_hDC, COLORONCOLOR);
|
|||
|
SetBrushOrgEx(pDC->m_hDC, 0, 0, NULL);
|
|||
|
//dc.SetStretchBltMode
|
|||
|
|
|||
|
//m_Image.StretchBlt(pDC->GetSafeHdc(), CRect(0, 0, m_Image.GetWidth(), m_Image.GetHeight()), m_ImageRect);
|
|||
|
|
|||
|
|
|||
|
m_Image.Draw(pDC->GetSafeHdc(), m_ImageRect); //<2F><>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>Picture<72>ؼ<EFBFBD><D8BC><EFBFBD>ʾ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ReleaseDC(pDC);//<2F>ͷ<EFBFBD>picture<72>ؼ<EFBFBD><D8BC><EFBFBD>DC
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
HBRUSH CFastView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|||
|
{
|
|||
|
HBRUSH hbr = CStatic::OnCtlColor(pDC, pWnd, nCtlColor);
|
|||
|
|
|||
|
CBrush brush;
|
|||
|
brush.CreateSolidBrush(RGB(0, 0, 0));
|
|||
|
|
|||
|
// TODO: <20>ڴ˸<DAB4><CBB8><EFBFBD> DC <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
pDC->SetBkColor(RGB(0, 0, 0));
|
|||
|
return (HBRUSH)brush;
|
|||
|
|
|||
|
// TODO: <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵIJ<CFB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>軭<EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><F2B7B5BB><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
return hbr;
|
|||
|
}
|
|||
|
|
|||
|
UINT CFastView::CameraThreadFunc(PVOID pv)
|
|||
|
{
|
|||
|
//ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|||
|
|
|||
|
ST_THREAD_PARAM *pParam = (ST_THREAD_PARAM *)pv;
|
|||
|
CFastView *pThis = (CFastView*)pParam->pParent;
|
|||
|
int nIdx = pParam->nIdx;
|
|||
|
delete pv;
|
|||
|
|
|||
|
if (pThis->m_nCameraTyp == HIK_RGBD)
|
|||
|
{
|
|||
|
pThis->m_pCameraDlg = new CHikRgdbCamera(pThis, nIdx);
|
|||
|
pThis->m_pCameraDlg->Create(IDD_DLG_CAM);
|
|||
|
pThis->m_pCameraDlg->ShowWindow(SW_HIDE);
|
|||
|
}
|
|||
|
else if (pThis->m_nCameraTyp == DAHUA_FISHEYE)
|
|||
|
{
|
|||
|
pThis->m_pCameraDlg = new CDahuaFisheyeCamera(pThis, nIdx, pThis->m_nPlayTyp);
|
|||
|
pThis->m_pCameraDlg->Create(IDD_DLG_CAM);
|
|||
|
pThis->m_pCameraDlg->ShowWindow(SW_HIDE);
|
|||
|
}
|
|||
|
|
|||
|
/*else if (pThis->m_nCameraTyp == DAHUA_FISHEYE_LIVE)
|
|||
|
{
|
|||
|
pThis->m_pCameraDlg = new CDahuaFisheyeLiveCamera(pThis, nIdx);
|
|||
|
pThis->m_pCameraDlg->Create(IDD_DLG_CAM);
|
|||
|
pThis->m_pCameraDlg->ShowWindow(SW_HIDE);
|
|||
|
}*/
|
|||
|
|
|||
|
//The message loop
|
|||
|
MSG msg;
|
|||
|
while (GetMessage(&msg, NULL, 0, 0))
|
|||
|
{
|
|||
|
TranslateMessage(&msg);
|
|||
|
DispatchMessage(&msg);
|
|||
|
}
|
|||
|
|
|||
|
pThis->m_pCameraDlg->DestroyWindow();
|
|||
|
delete pThis->m_pCameraDlg;
|
|||
|
|
|||
|
TRACE(_T("<EFBFBD>ͷŶԻ<EFBFBD><EFBFBD><EFBFBD>"));
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CFastView::SetCameraInfo(int nIdx, ENUM_CAMERA_TYPE enCameraType, ENUM_PLAY_TYPE enPlayType, String strIp, int nPort)
|
|||
|
{
|
|||
|
m_nCameraIdx = nIdx;
|
|||
|
m_nCameraTyp = enCameraType;
|
|||
|
m_nPlayTyp = enPlayType;
|
|||
|
|
|||
|
ST_THREAD_PARAM *pParam = new ST_THREAD_PARAM;
|
|||
|
pParam->nIdx = nIdx;
|
|||
|
pParam->pParent = this;
|
|||
|
AfxBeginThread(CFastView::CameraThreadFunc, (void*)pParam);
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void CFastView::OnRButtonUp(UINT nFlags, CPoint point)
|
|||
|
{
|
|||
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
// TODO: Add your message handler code here and/or call default
|
|||
|
CMenu menu;
|
|||
|
menu.CreatePopupMenu();
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>Dz˵<C7B2><CBB5><EFBFBD>
|
|||
|
menu.AppendMenu(MF_STRING, ID_MRU_SAMPLE, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
//menu.AppendMenu(MF_STRING, WM TEST2, "Test item 2");
|
|||
|
//menu.AppendMenu(MF_STRING, WM TEST3, "Test item 3");
|
|||
|
//menu.AppendMenu(MF_STRING, WM TEST4, "Test item 4");
|
|||
|
//<2F><><EFBFBD>һ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>·<EFBFBD>20<32><30><EFBFBD>صĵط<C4B5><D8B7><EFBFBD>ʾ<EFBFBD>˵<EFBFBD>
|
|||
|
POINT tpoint;
|
|||
|
tpoint.x = point.x;
|
|||
|
tpoint.y = point.y;
|
|||
|
|
|||
|
ClientToScreen(&tpoint);
|
|||
|
menu.TrackPopupMenu(TPM_LEFTALIGN, tpoint.x, tpoint.y + 20, this);
|
|||
|
|
|||
|
CStatic::OnRButtonDown(nFlags, point);
|
|||
|
}
|
|||
|
|
|||
|
BOOL CFastView::OnCommand(WPARAM wParam, LPARAM lParam)
|
|||
|
{
|
|||
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ר<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
|
|||
|
switch (LOWORD(wParam))
|
|||
|
{
|
|||
|
case ID_MRU_SAMPLE:
|
|||
|
{
|
|||
|
/*CString strMsg;
|
|||
|
strMsg.Format("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ%d<><64><EFBFBD><EFBFBD>", m_nCameraIndex);
|
|||
|
AfxMessageBox(strMsg);*/
|
|||
|
if (NULL != m_pCameraDlg)
|
|||
|
{
|
|||
|
::PostMessage(m_pCameraDlg->m_hWnd, WM_CAMERA_SNAP, NULL, NULL);
|
|||
|
}
|
|||
|
//((CMainFrame*)GetParentFrame())->BeginSample(m_nCameraIndex);
|
|||
|
break;
|
|||
|
}
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
return CStatic::OnCommand(wParam, lParam);
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>1<EFBFBD><31>opencv<63><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
|
|||
|
//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ҫչʾ<D5B9><CABE>Picture Control<6F><6C>ID
|
|||
|
void CFastView::DrawMat(cv::Mat& imageMat, int nOffset)
|
|||
|
{
|
|||
|
/*cv::Mat img;
|
|||
|
|
|||
|
int nWidth = imageMat.cols * rect.Height() *1.0 / imageMat.rows;
|
|||
|
cv::resize(imageMat, img, cv::Size(nWidth, rect.Height()));// <20><><EFBFBD><EFBFBD>Mat<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// תһ<D7AA>¸<EFBFBD>ʽ ,<2C><><EFBFBD>ο<EFBFBD><CEBF>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD>,*/
|
|||
|
|
|||
|
/*switch (imgTmp.channels())
|
|||
|
{
|
|||
|
case 1:
|
|||
|
cv::cvtColor(imgTmp, imgTmp, CV_GRAY2BGRA); // GRAY<41><59>ͨ<EFBFBD><CDA8>
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
cv::cvtColor(imgTmp, imgTmp, CV_BGR2BGRA); // BGR<47><52>ͨ<EFBFBD><CDA8>
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
int pixelBytes = imgTmp.channels() * (imgTmp.depth() + 1); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ٸ<EFBFBD><D9B8>ֽ<EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD>bitmapinfo(<28><><EFBFBD><EFBFBD>ͷ)
|
|||
|
BITMAPINFO bitInfo;
|
|||
|
bitInfo.bmiHeader.biBitCount = 8 * pixelBytes;
|
|||
|
bitInfo.bmiHeader.biWidth = imgTmp.cols;
|
|||
|
bitInfo.bmiHeader.biHeight = -imgTmp.rows;
|
|||
|
bitInfo.bmiHeader.biPlanes = 1;
|
|||
|
bitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
|||
|
bitInfo.bmiHeader.biCompression = BI_RGB;
|
|||
|
bitInfo.bmiHeader.biClrImportant = 0;
|
|||
|
bitInfo.bmiHeader.biClrUsed = 0;
|
|||
|
bitInfo.bmiHeader.biSizeImage = 0;
|
|||
|
bitInfo.bmiHeader.biXPelsPerMeter = 0;
|
|||
|
bitInfo.bmiHeader.biYPelsPerMeter = 0;
|
|||
|
// Mat.data + bitmap<61><70><EFBFBD><EFBFBD>ͷ -> MFC
|
|||
|
CDC* pDC = GetDC();
|
|||
|
::StretchDIBits(
|
|||
|
pDC->GetSafeHdc(),
|
|||
|
(rect.Width()-nWidth)/2, 0, nWidth, rect.Height(),
|
|||
|
0, 0, nWidth, rect.Height(),
|
|||
|
imgTmp.data,
|
|||
|
&bitInfo,
|
|||
|
DIB_RGB_COLORS,
|
|||
|
SRCCOPY
|
|||
|
);
|
|||
|
ReleaseDC(pDC);*/
|
|||
|
|
|||
|
CImage image;
|
|||
|
image.Create(imageMat.cols, imageMat.rows, 24);
|
|||
|
for (int y = 0; y < imageMat.rows; ++y) {
|
|||
|
const uchar* src = imageMat.ptr<uchar>(y);
|
|||
|
uchar* dst = reinterpret_cast<uchar*>(image.GetBits()) + y * image.GetPitch();
|
|||
|
for (int x = 0; x < imageMat.cols; ++x) {
|
|||
|
dst[0] = src[0];
|
|||
|
dst[1] = src[1];
|
|||
|
dst[2] = src[2];
|
|||
|
src += 3;
|
|||
|
dst += 3;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HDC hdc = ::GetDC(m_hWnd);
|
|||
|
|
|||
|
CRect rect;
|
|||
|
GetClientRect(&rect); // <20><>ȡ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>С
|
|||
|
image.Draw(hdc, rect);
|
|||
|
image.Destroy();
|
|||
|
::ReleaseDC(m_hWnd, hdc);
|
|||
|
|
|||
|
}
|
|||
|
|