»õ ÆÄÀÏ |
| | |
| | | // CameraImageView.cpp : 구í íì¼ì
ëë¤. |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | | #include "ReveiwHistory.h" |
| | | #include "CameraImageView.h" |
| | | #include "CHImageControls/CHBufferDC.h" |
| | | |
| | | using namespace CHImageControls; |
| | | // CDlgReviewCamera ëí ììì
ëë¤. |
| | | |
| | | // CCameraImageView |
| | | |
| | | IMPLEMENT_DYNAMIC(CCameraImageView, CWnd) |
| | | |
| | | CCameraImageView::CCameraImageView(CWnd *pParentWnd) |
| | | { |
| | | m_strViewName = _T(""); |
| | | m_pParentWnd = pParentWnd; |
| | | |
| | | m_nHScroll = 0; |
| | | m_nVScroll = 0; |
| | | |
| | | m_nMaxHScroll = 0; |
| | | m_nMaxVScroll = 0; |
| | | m_nDrawMode = 0; |
| | | |
| | | m_rtClientRect = CRect(0,0,0,0); |
| | | m_bDrawCenterLine = FALSE; |
| | | m_bDrawRuler = FALSE; |
| | | m_bDrawViewName = FALSE; |
| | | m_nViewBand = BandTypeColor; |
| | | m_nDrawMode = 1; |
| | | |
| | | m_dWidthScale = 1.0; |
| | | m_dHeightScale = 1.0; |
| | | m_nScaleWidth = 0; |
| | | m_nScaleHeight = 0; |
| | | |
| | | m_dResolution = 1.0; // um |
| | | m_dRulerGab = 100.0; //um |
| | | |
| | | m_pCIV2P = NULL; |
| | | |
| | | InitializeCriticalSection(&m_csImageData); |
| | | |
| | | } |
| | | |
| | | CCameraImageView::~CCameraImageView() |
| | | { |
| | | DeleteCriticalSection(&m_csImageData); |
| | | } |
| | | |
| | | // CCameraImageView ë©ìì§ ì²ë¦¬ê¸°ì
ëë¤. |
| | | BEGIN_MESSAGE_MAP(CCameraImageView, CWnd) |
| | | |
| | | ON_COMMAND(IDR_LOAD_IMAGE, &CCameraImageView::OnLoadImage) |
| | | ON_COMMAND(IDR_SAVE_IMAGE, &CCameraImageView::OnSaveImage) |
| | | ON_COMMAND(IDR_CENTER_LINE, &CCameraImageView::OnCenterLine) |
| | | ON_COMMAND(IDR_RULER, &CCameraImageView::OnRuler) |
| | | ON_COMMAND(IDR_VIEW_ORIGIN, &CCameraImageView::OnViewOrigin) |
| | | ON_COMMAND(IDR_VIEW_FIT, &CCameraImageView::OnViewFit) |
| | | |
| | | ON_COMMAND(IDR_VIEW_COLOR, &CCameraImageView::OnViewColor) |
| | | ON_COMMAND(IDR_VIEW_GRAY,&CCameraImageView::OnViewGray) |
| | | ON_COMMAND(IDR_VIEW_RED, &CCameraImageView::OnViewRed) |
| | | ON_COMMAND(IDR_VIEW_GREEN, &CCameraImageView::OnViewGreen) |
| | | ON_COMMAND(IDR_VIEW_BLUE, &CCameraImageView::OnViewBlue) |
| | | |
| | | ON_WM_PAINT() |
| | | ON_WM_MOUSEMOVE() |
| | | ON_WM_LBUTTONDOWN() |
| | | ON_WM_LBUTTONUP() |
| | | ON_WM_RBUTTONDOWN() |
| | | ON_WM_RBUTTONUP() |
| | | ON_WM_DESTROY() |
| | | ON_WM_HSCROLL() |
| | | ON_WM_VSCROLL() |
| | | ON_WM_LBUTTONDBLCLK() |
| | | ON_WM_RBUTTONDBLCLK() |
| | | ON_WM_CREATE() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CCHImageView ë©ìì§ ì²ë¦¬ê¸°ì
ëë¤. |
| | | void CCameraImageView::OnPaint() |
| | | { |
| | | CCHBufferDC *pDC = new CCHBufferDC(this); // device context for painting |
| | | |
| | | UpdateImageView(pDC); |
| | | |
| | | delete pDC; |
| | | } |
| | | |
| | | void CCameraImageView::UpdateImageView(CDC *pDC) |
| | | { |
| | | CRect rtCurrentRect , rtSourceRect; |
| | | GetClientRect(rtCurrentRect); |
| | | |
| | | //DrawText(CPoint(30, 30), RGB(255,255,0), _T("Defect Size")); |
| | | |
| | | if (GetImageExist()) |
| | | { |
| | | if (m_rtClientRect!=rtCurrentRect) SetDrawMode(m_nDrawMode); |
| | | |
| | | int nSrcWidth = GetWidth(); |
| | | int nSrcHeight = GetHeight(); |
| | | |
| | | int nWidth = int(double(nSrcWidth) * m_dWidthScale + 0.5); |
| | | int nHeight = int(double(nSrcHeight) * m_dHeightScale + 0.5); |
| | | |
| | | if (m_nScaleWidth!=nWidth || m_nScaleHeight!=nHeight) |
| | | { |
| | | SetDrawMode(m_nDrawMode); |
| | | } |
| | | |
| | | switch(m_nDrawMode) |
| | | { |
| | | case 0: |
| | | pDC->SelectStockObject(GRAY_BRUSH); |
| | | pDC->Rectangle(rtCurrentRect); |
| | | ShowImage(pDC->m_hDC, 0, 0, rtCurrentRect.Width(), rtCurrentRect.Height(), m_nHScroll, m_nVScroll); |
| | | break; |
| | | |
| | | case 1: |
| | | ShowImage(pDC->m_hDC, rtCurrentRect); |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | pDC->SelectStockObject(GRAY_BRUSH); |
| | | pDC->Rectangle(rtCurrentRect); |
| | | } |
| | | |
| | | if (m_bDrawCenterLine) DrawCenterLine(pDC); |
| | | |
| | | if (m_bDrawRuler) DrawRuler(pDC); |
| | | |
| | | if (m_bDrawViewName) DrawViewName(pDC); |
| | | |
| | | } |
| | | |
| | | void CCameraImageView::OnMouseMove(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | CRect rect; |
| | | this->GetClientRect(rect); |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | |
| | | if (point.x > 0 && point.x < this->GetScaleWidth()-1 && |
| | | point.y > 0 && point.y < this->GetScaleHeight()-1 && nFlags == MK_LBUTTON) |
| | | { |
| | | m_pParentWnd->SendMessage(WM_MOUSEMOVE, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | } |
| | | |
| | | __super::OnMouseMove(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnLButtonDown(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | CRect rect; |
| | | this->GetClientRect(rect); |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | |
| | | if (point.x > 0 && point.x < this->GetScaleWidth()-1 && |
| | | point.y > 0 && point.y < this->GetScaleHeight()-1 ) |
| | | { |
| | | m_pParentWnd->SendMessage(WM_LBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | } |
| | | |
| | | __super::OnLButtonDown(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnLButtonUp(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | CRect rect; |
| | | this->GetClientRect(rect); |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | |
| | | if (point.x > 0 && point.x < this->GetScaleWidth()-1 && |
| | | point.y > 0 && point.y < this->GetScaleHeight()-1 ) |
| | | { |
| | | m_pParentWnd->SendMessage(WM_LBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | } |
| | | |
| | | __super::OnLButtonUp(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnLButtonDblClk(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | m_pParentWnd->SendMessage(WM_LBUTTONDBLCLK, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | |
| | | __super::OnLButtonDblClk(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnRButtonDown(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | CMenu menu; |
| | | CMenu popMenu; |
| | | menu.CreateMenu(); // ìµìì ë¼ë ë©ë´ |
| | | popMenu.CreatePopupMenu(); // íì
ë©ë´ |
| | | BOOL bAddMenu = FALSE; |
| | | |
| | | popMenu.AppendMenu(MF_STRING, IDR_LOAD_IMAGE, _T("Load Image")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_SAVE_IMAGE, _T("Save Image")); // ììì ìë¸ë©ë´ ì¶ê° |
| | | popMenu.AppendMenu(MF_SEPARATOR); |
| | | popMenu.AppendMenu(MF_STRING, IDR_CENTER_LINE, _T("Center Line")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_RULER, _T("Ruler")); |
| | | popMenu.AppendMenu(MF_SEPARATOR); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_ORIGIN, _T("1:1 View")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_FIT, _T("Fit View")); // ììì ìë¸ë©ë´ ì¶ê° |
| | | popMenu.AppendMenu(MF_SEPARATOR); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_COLOR, _T("Color")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_GRAY, _T("Gray")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_RED, _T("Red")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_GREEN, _T("Green")); |
| | | popMenu.AppendMenu(MF_STRING, IDR_VIEW_BLUE, _T("Blue")); |
| | | |
| | | // ë©ë´ ìí ì²ë¦¬ |
| | | if (m_bDrawCenterLine) |
| | | { |
| | | popMenu.CheckMenuItem(IDR_CENTER_LINE, MF_CHECKED); |
| | | } |
| | | |
| | | if (m_bDrawRuler) |
| | | { |
| | | popMenu.CheckMenuItem(IDR_RULER, MF_CHECKED); |
| | | } |
| | | |
| | | |
| | | switch(m_nDrawMode) |
| | | { |
| | | case 0: |
| | | popMenu.CheckMenuItem(IDR_VIEW_ORIGIN, MF_CHECKED); |
| | | break; |
| | | case 1: |
| | | popMenu.CheckMenuItem(IDR_VIEW_FIT, MF_CHECKED); |
| | | break; |
| | | } |
| | | |
| | | // ë©ë´ ìí ì²ë¦¬ |
| | | switch(m_nViewBand) |
| | | { |
| | | case BandTypeRed: |
| | | popMenu.CheckMenuItem(IDR_VIEW_RED, MF_CHECKED); |
| | | break; |
| | | case BandTypeGreen: |
| | | popMenu.CheckMenuItem(IDR_VIEW_GREEN, MF_CHECKED); |
| | | break; |
| | | case BandTypeBlue: |
| | | popMenu.CheckMenuItem(IDR_VIEW_BLUE, MF_CHECKED); |
| | | break; |
| | | case BandTypeGray: |
| | | popMenu.CheckMenuItem(IDR_VIEW_GRAY, MF_CHECKED); |
| | | break; |
| | | default: |
| | | popMenu.CheckMenuItem(IDR_VIEW_COLOR, MF_CHECKED); |
| | | break; |
| | | } |
| | | |
| | | // 컨í
ì¤í¸ ë©ë´ í¸ì¶ |
| | | CRect rect; |
| | | GetWindowRect(rect); |
| | | int nX = rect.left + point.x; |
| | | int nY = rect.top + point.y; |
| | | |
| | | popMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, nX, nY, this); |
| | | |
| | | if (m_pParentWnd==NULL) return; |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | m_pParentWnd->SendMessage(WM_RBUTTONDOWN, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | |
| | | __super::OnRButtonDown(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnRButtonUp(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | m_pParentWnd->SendMessage(WM_RBUTTONUP, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | |
| | | __super::OnRButtonUp(nFlags, point); |
| | | } |
| | | |
| | | void CCameraImageView::OnRButtonDblClk(UINT nFlags, CPoint point) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | if (m_pParentWnd==NULL) return; |
| | | |
| | | point.x += m_nHScroll; |
| | | point.y += m_nVScroll; |
| | | m_pParentWnd->SendMessage(WM_RBUTTONDBLCLK, static_cast<WPARAM>(nFlags), MAKELPARAM(point.x, point.y)); |
| | | |
| | | __super::OnRButtonDblClk(nFlags, point); |
| | | } |
| | | |
| | | |
| | | void CCameraImageView::SetDrawCenterLine(BOOL bDraw) |
| | | { |
| | | m_bDrawCenterLine = bDraw; |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::SetDrawRuler(BOOL bDraw) |
| | | { |
| | | m_bDrawRuler = bDraw; |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::SetDrawMode(int nDrawMode) |
| | | { |
| | | m_nDrawMode = nDrawMode; |
| | | |
| | | GetClientRect(m_rtClientRect); |
| | | |
| | | m_nScaleWidth = GetScaleWidth(); |
| | | m_nScaleHeight = GetScaleHeight(); |
| | | |
| | | switch(m_nDrawMode) |
| | | { |
| | | case 0: |
| | | if (m_rtClientRect.Width() >= m_nScaleWidth) |
| | | { |
| | | m_nMaxHScroll = 0; |
| | | } |
| | | else |
| | | { |
| | | m_nMaxHScroll = m_nScaleWidth - (m_rtClientRect.Width()+17); |
| | | if (m_nMaxHScroll < 0) |
| | | { |
| | | m_nMaxHScroll = 0; |
| | | } |
| | | else |
| | | { |
| | | m_nMaxHScroll += 17; |
| | | } |
| | | } |
| | | |
| | | if (m_rtClientRect.Height() >= m_nScaleHeight) |
| | | { |
| | | m_nMaxVScroll = 0; |
| | | } |
| | | else |
| | | { |
| | | m_nMaxVScroll = m_nScaleHeight - (m_rtClientRect.Height()+17); |
| | | if (m_nMaxVScroll < 0) |
| | | { |
| | | m_nMaxVScroll = 0; |
| | | } |
| | | else |
| | | { |
| | | m_nMaxVScroll += 17; |
| | | } |
| | | |
| | | } |
| | | break; |
| | | |
| | | case 1: |
| | | m_nMaxHScroll = m_nMaxVScroll = 0; |
| | | break; |
| | | } |
| | | |
| | | m_nHScroll = m_nVScroll = 0; |
| | | |
| | | SetScrollRange(SB_HORZ, 0, m_nMaxHScroll); |
| | | SetScrollRange(SB_VERT, 0, m_nMaxVScroll); |
| | | SetScrollPos(SB_HORZ, m_nHScroll); |
| | | SetScrollPos(SB_VERT, m_nVScroll); |
| | | |
| | | } |
| | | |
| | | void CCameraImageView::DrawCenterLine(CDC *pDC) |
| | | { |
| | | if (m_rtClientRect.Width()==0 || m_rtClientRect.Height()==0) return; |
| | | |
| | | CRect rtDraw = m_rtClientRect; |
| | | if (m_nDrawMode==0) |
| | | { |
| | | rtDraw.right = GetWidth(); |
| | | rtDraw.bottom = GetHeight(); |
| | | } |
| | | |
| | | rtDraw.left -= m_nHScroll; |
| | | rtDraw.top -= m_nVScroll; |
| | | rtDraw.right -= m_nHScroll; |
| | | rtDraw.bottom -= m_nVScroll; |
| | | |
| | | CPen pen, *pPen=NULL; |
| | | pen.CreatePen(PS_SOLID, 2, RGB(255,0,0)); |
| | | pDC->SelectObject(&pen); |
| | | |
| | | //pDC->SelectStockObject(WHITE_PEN); |
| | | |
| | | // center line |
| | | pDC->MoveTo( (rtDraw.Width()/2)-m_nHScroll, 0); |
| | | pDC->LineTo((rtDraw.Width()/2)-m_nHScroll, rtDraw.Height()); |
| | | pDC->MoveTo(0, (rtDraw.Height()/2)-m_nVScroll); |
| | | pDC->LineTo(rtDraw.Width(), (rtDraw.Height()/2)-m_nVScroll); |
| | | } |
| | | |
| | | void CCameraImageView::DrawRuler(CDC *pDC) |
| | | { |
| | | if (m_dRulerGab==0.0) return; |
| | | |
| | | if (m_rtClientRect.Width()==0 || m_rtClientRect.Height()==0) return; |
| | | |
| | | CRect rtDraw = m_rtClientRect; |
| | | if (m_nDrawMode==0) |
| | | { |
| | | rtDraw.right = GetWidth(); |
| | | rtDraw.bottom = GetHeight(); |
| | | } |
| | | |
| | | rtDraw.left -= m_nHScroll; |
| | | rtDraw.top -= m_nVScroll; |
| | | rtDraw.right -= m_nHScroll; |
| | | rtDraw.bottom -= m_nVScroll; |
| | | |
| | | pDC->SelectStockObject(WHITE_PEN); |
| | | |
| | | CFont font; |
| | | VERIFY(font.CreateFont( |
| | | 10, // nHeight |
| | | 5, // nWidth |
| | | 0, // nEscapement |
| | | 0, // nOrientation |
| | | FW_NORMAL, // nWeight |
| | | FALSE, // bItalic |
| | | FALSE, // bUnderline |
| | | 0, // cStrikeOut |
| | | ANSI_CHARSET, // nCharSet |
| | | OUT_DEFAULT_PRECIS, // nOutPrecision |
| | | CLIP_DEFAULT_PRECIS, // nClipPrecision |
| | | DEFAULT_QUALITY, // nQuality |
| | | DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily |
| | | _T("Arial"))); // lpszFacename |
| | | |
| | | // Do something with the font just created... |
| | | CFont* def_font = pDC->SelectObject(&font); |
| | | pDC->SetTextColor(RGB(255,255,255)); |
| | | pDC->SetBkMode(TRANSPARENT); |
| | | |
| | | // ruler |
| | | double dResX = m_dResolution / m_dWidthScale; |
| | | double dResY = m_dResolution / m_dHeightScale; |
| | | double dGabX = m_dRulerGab / dResX; // um |
| | | double dGabY = m_dRulerGab / dResY; // um |
| | | |
| | | if (dGabX<=0.0 || dGabY<=0.0) return; |
| | | |
| | | double dWidth = GetScaleWidth(); |
| | | double dHeight = GetScaleHeight(); |
| | | |
| | | double dCenterX = rtDraw.Width()/2; |
| | | double dCenterY = rtDraw.Height()/2; |
| | | |
| | | // x direction |
| | | CString strValue = _T(""); |
| | | strValue.Format(_T("%.1lf um"), m_dRulerGab); |
| | | pDC->TextOut(-m_nHScroll+5, rtDraw.Height()/2-m_nVScroll+5, strValue); |
| | | for (double dPos=dCenterX; dPos>=0.0; dPos-=dGabX) |
| | | { |
| | | pDC->MoveTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll); |
| | | pDC->LineTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll+6); |
| | | } |
| | | for (double dPos=dCenterX+dGabX; dPos<dWidth; dPos+=dGabX) |
| | | { |
| | | pDC->MoveTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll); |
| | | pDC->LineTo((int)(dPos+0.5)-m_nHScroll, -m_nVScroll+6); |
| | | } |
| | | |
| | | // y direction |
| | | strValue.Format(_T("%.1lf um"), m_dRulerGab); |
| | | pDC->TextOut(rtDraw.Width()/2-m_nHScroll+5, 5-m_nVScroll, strValue); |
| | | for (double dPos=dCenterY; dPos>0.0; dPos-=dGabY) |
| | | { |
| | | pDC->MoveTo(-m_nHScroll, (int)(dPos+0.5)-m_nVScroll); |
| | | pDC->LineTo(-m_nHScroll+6, (int)(dPos+0.5)-m_nVScroll); |
| | | } |
| | | for (double dPos=dCenterY+dGabY; dPos<dHeight; dPos+=dGabY) |
| | | { |
| | | pDC->MoveTo(-m_nHScroll, (int)(dPos+0.5)-m_nVScroll); |
| | | pDC->LineTo(-m_nHScroll+6, (int)(dPos+0.5)-m_nVScroll); |
| | | } |
| | | } |
| | | |
| | | BOOL CCameraImageView::SetViewImage(CCHImageData* pImageData) |
| | | { |
| | | if (pImageData==NULL) return FALSE; |
| | | |
| | | if (!pImageData->GetImageExist()) return FALSE; |
| | | |
| | | EnterCriticalSection(&m_csImageData); |
| | | |
| | | this->CopyImageFrom(pImageData); |
| | | |
| | | LeaveCriticalSection(&m_csImageData); |
| | | |
| | | this->Invalidate(TRUE); |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | BOOL CCameraImageView::SetOriginImage(CCHImageData* pImageData) |
| | | { |
| | | if (pImageData==NULL) return FALSE; |
| | | |
| | | if (!pImageData->GetImageExist()) return FALSE; |
| | | |
| | | EnterCriticalSection(&m_csImageData); |
| | | |
| | | m_OriginImage.CopyImageFrom(pImageData); |
| | | |
| | | m_OriginImage.GetBandImage(m_nViewBand, this); |
| | | |
| | | LeaveCriticalSection(&m_csImageData); |
| | | |
| | | this->Invalidate(TRUE); |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | BOOL CCameraImageView::SetOriginImage(int nWidth, int nHeight, int nChannels, int nWidthStep, const BYTE* pBuffer) |
| | | { |
| | | if (nWidth<0 || nHeight<0 || nChannels<0 || pBuffer==NULL) return FALSE; |
| | | |
| | | EnterCriticalSection(&m_csImageData); |
| | | |
| | | if (nWidth!=m_OriginImage.GetWidth() || nHeight!=m_OriginImage.GetHeight() || nChannels!=m_OriginImage.GetChannels()) |
| | | { |
| | | if (m_OriginImage.CreateImage(nWidth, nHeight, 8, nChannels)==FALSE) |
| | | { |
| | | LeaveCriticalSection(&m_csImageData); |
| | | return FALSE; |
| | | } |
| | | } |
| | | |
| | | memcpy(m_OriginImage.GetImageBuffer(), pBuffer, nWidthStep*nHeight); |
| | | |
| | | if (nChannels==1) m_nViewBand = BandTypeGray; |
| | | |
| | | BOOL bResult = m_OriginImage.GetBandImage(m_nViewBand, this); |
| | | |
| | | LeaveCriticalSection(&m_csImageData); |
| | | |
| | | return bResult; |
| | | } |
| | | |
| | | |
| | | BOOL CCameraImageView::GetViewImage(CCHImageData* pImageData) |
| | | { |
| | | if (pImageData==NULL) return FALSE; |
| | | |
| | | EnterCriticalSection(&m_csImageData); |
| | | |
| | | BOOL bReturn = this->CopyImageTo(pImageData); |
| | | |
| | | LeaveCriticalSection(&m_csImageData); |
| | | |
| | | return bReturn; |
| | | } |
| | | |
| | | BOOL CCameraImageView::GetOriginImage(CCHImageData* pImageData) |
| | | { |
| | | if (pImageData==NULL) return FALSE; |
| | | |
| | | EnterCriticalSection(&m_csImageData); |
| | | |
| | | BOOL bReturn = m_OriginImage.CopyImageTo(pImageData); |
| | | |
| | | LeaveCriticalSection(&m_csImageData); |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | void CCameraImageView::DrawViewName(CDC *pDC) |
| | | { |
| | | CFont font; |
| | | VERIFY(font.CreateFont( |
| | | 20, // nHeight |
| | | 10, // nWidth |
| | | 0, // nEscapement |
| | | 0, // nOrientation |
| | | FW_NORMAL, // nWeight |
| | | FALSE, // bItalic |
| | | FALSE, // bUnderline |
| | | 0, // cStrikeOut |
| | | ANSI_CHARSET, // nCharSet |
| | | OUT_DEFAULT_PRECIS, // nOutPrecision |
| | | CLIP_DEFAULT_PRECIS, // nClipPrecision |
| | | DEFAULT_QUALITY, // nQuality |
| | | DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily |
| | | _T("Arial"))); // lpszFacename |
| | | |
| | | // Do something with the font just created... |
| | | CFont* def_font = pDC->SelectObject(&font); |
| | | pDC->SetTextColor(RGB(255,255,255)); |
| | | pDC->SetBkMode(TRANSPARENT); |
| | | |
| | | int nStrLength = (m_strViewName.GetLength() * 10); |
| | | |
| | | pDC->TextOut(m_rtClientRect.Width() - nStrLength - 30, 5, m_strViewName); |
| | | pDC->SelectObject(def_font); |
| | | } |
| | | |
| | | int CCameraImageView::GetScaleWidth() |
| | | { |
| | | CRect rect; |
| | | int nWidth = GetWidth(); |
| | | |
| | | switch(m_nDrawMode) |
| | | { |
| | | case 0: |
| | | m_dWidthScale = 1.0; |
| | | return nWidth; |
| | | |
| | | case 1: |
| | | GetClientRect(rect); |
| | | if (nWidth!=0) |
| | | m_dWidthScale = double(rect.Width()) / double(nWidth); |
| | | return int(double(nWidth) * m_dWidthScale + 0.5); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CCameraImageView::GetScaleHeight() |
| | | { |
| | | CRect rect; |
| | | int nHeight = GetHeight(); |
| | | |
| | | switch(m_nDrawMode) |
| | | { |
| | | case 0: |
| | | m_dHeightScale = 1.0; |
| | | return nHeight; |
| | | |
| | | case 1: |
| | | GetClientRect(rect); |
| | | if (nHeight!=0) |
| | | m_dHeightScale = double(rect.Height()) / double(nHeight); |
| | | return int(double(nHeight) * m_dHeightScale + 0.5); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CCameraImageView::GetHScrollPos(void) |
| | | { |
| | | return m_nHScroll; |
| | | } |
| | | |
| | | int CCameraImageView::GetVScrollPos(void) |
| | | { |
| | | return m_nVScroll; |
| | | } |
| | | |
| | | void CCameraImageView::SetViewName(const CString strViewName) |
| | | { |
| | | m_strViewName = strViewName; |
| | | } |
| | | |
| | | void CCameraImageView::SetParentWnd(CWnd* pParentWnd) |
| | | { |
| | | m_pParentWnd = pParentWnd; |
| | | } |
| | | |
| | | BOOL CCameraImageView::LoadImage(const CString& strFilename) |
| | | { |
| | | if (!CCHImageData::LoadImage(strFilename)) |
| | | { |
| | | m_nHScroll = m_nVScroll = 0; |
| | | m_nMaxHScroll = m_nMaxVScroll = 0; |
| | | SetScrollRange(SB_HORZ, 0, m_nMaxHScroll); |
| | | SetScrollRange(SB_VERT, 0, m_nMaxVScroll); |
| | | SetScrollPos(SB_HORZ, m_nHScroll); |
| | | SetScrollPos(SB_VERT, m_nVScroll); |
| | | return FALSE; |
| | | } |
| | | |
| | | SetDrawMode(m_nDrawMode); |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | void CCameraImageView::OnDestroy() |
| | | { |
| | | __super::OnDestroy(); |
| | | } |
| | | |
| | | void CCameraImageView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | switch (nSBCode) |
| | | { |
| | | case SB_LEFT: // Scroll to far left. |
| | | break; |
| | | case SB_RIGHT: // Scroll to far right. |
| | | break; |
| | | case SB_ENDSCROLL: // End scroll. |
| | | break; |
| | | case SB_LINELEFT: // Scroll left. |
| | | if (m_nHScroll > 0) |
| | | m_nHScroll--; |
| | | break; |
| | | case SB_LINERIGHT: // Scroll right. |
| | | if (m_nHScroll < m_nMaxHScroll) |
| | | m_nHScroll++; |
| | | break; |
| | | case SB_PAGELEFT: // Scroll one page left. |
| | | if (5 < m_nMaxHScroll / 256) |
| | | m_nHScroll -= 20;//m_nHScroll -= 5; |
| | | else |
| | | m_nHScroll -= 10;//m_nHScroll -= m_nMaxHScroll / 256; |
| | | |
| | | if (m_nHScroll < 0) |
| | | m_nHScroll = 0; |
| | | break; |
| | | case SB_PAGERIGHT: // Scroll one page right. |
| | | if (5 < m_nMaxHScroll / 256) |
| | | m_nHScroll += 20;//m_nHScroll += 5; |
| | | else |
| | | m_nHScroll += 10;//m_nHScroll += m_nMaxHScroll / 256; |
| | | |
| | | if (m_nHScroll > m_nMaxHScroll) |
| | | m_nHScroll = m_nMaxHScroll; |
| | | break; |
| | | case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position |
| | | break; |
| | | case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the |
| | | m_nHScroll = nPos; |
| | | break; |
| | | } |
| | | |
| | | // Set the new position of the thumb (scroll box). |
| | | SetScrollPos(SB_HORZ, m_nHScroll); |
| | | |
| | | Invalidate(FALSE); |
| | | |
| | | __super::OnHScroll(nSBCode, nPos, pScrollBar); |
| | | } |
| | | |
| | | void CCameraImageView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) |
| | | { |
| | | // TODO: ì¬ê¸°ì ë©ìì§ ì²ë¦¬ê¸° ì½ë를 ì¶ê° ë°/ëë 기본ê°ì í¸ì¶í©ëë¤. |
| | | switch (nSBCode) |
| | | { |
| | | case SB_BOTTOM: // Scroll to bottom. |
| | | break; |
| | | case SB_ENDSCROLL: // End scroll. |
| | | break; |
| | | case SB_LINEDOWN: // Scroll one line down. |
| | | if (m_nVScroll < m_nMaxVScroll) |
| | | m_nVScroll++; |
| | | break; |
| | | case SB_LINEUP: // Scroll one line up. |
| | | if (m_nVScroll > 0) |
| | | m_nVScroll--; |
| | | break; |
| | | case SB_PAGEDOWN: // Scroll one page down. |
| | | if (5 < m_nMaxVScroll / 256) |
| | | m_nVScroll += 20;//m_nVScroll += 5; |
| | | else |
| | | m_nVScroll += 10;//m_nVScroll += (m_nMaxVScroll / 256); |
| | | |
| | | if (m_nVScroll > m_nMaxVScroll) |
| | | m_nVScroll = m_nMaxVScroll; |
| | | break; |
| | | case SB_PAGEUP: // Scroll one page up. |
| | | if (5 < m_nMaxVScroll / 256) |
| | | m_nVScroll -= 20;//m_nVScroll -= 5; |
| | | else |
| | | m_nVScroll -= 10;//m_nVScroll -= (m_nMaxVScroll / 256); |
| | | |
| | | if (m_nVScroll < 0) |
| | | m_nVScroll = 0; |
| | | break; |
| | | case SB_THUMBPOSITION: // Scroll to the absolute position. The current position is provided in nPos. |
| | | break; |
| | | case SB_THUMBTRACK: // Drag scroll box to specified position. The current position is provided in nPos. |
| | | m_nVScroll = nPos; |
| | | break; |
| | | case SB_TOP: // Scroll to top. |
| | | break; |
| | | } |
| | | |
| | | // Set the new position of the thumb (scroll box). |
| | | SetScrollPos(SB_VERT, m_nVScroll); |
| | | |
| | | Invalidate(FALSE); |
| | | |
| | | __super::OnVScroll(nSBCode, nPos, pScrollBar); |
| | | } |
| | | |
| | | |
| | | void CCameraImageView::OnLoadImage() |
| | | { |
| | | //CString szFilter = _T("All Files(*.*)|*.*||"); |
| | | CString szFilter = _T("BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| All Files(*.*)|*.*||"); |
| | | |
| | | CString strPath; |
| | | CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter); |
| | | dlg.m_ofn.lpstrTitle = _T("Load Image"); |
| | | |
| | | if(dlg.DoModal() == IDOK) |
| | | { |
| | | if (m_OriginImage.LoadImage(dlg.GetPathName())) |
| | | { |
| | | if (m_nViewBand==4) |
| | | { |
| | | m_OriginImage.CopyImageTo(this); |
| | | } |
| | | else |
| | | { |
| | | m_OriginImage.GetBandImage(m_nViewBand, this); |
| | | } |
| | | |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnSaveImage() |
| | | { |
| | | CString szFilter = _T("BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| All Files(*.*)|*.*||"); |
| | | |
| | | CString strPath; |
| | | CFileDialog dlg(FALSE, szFilter, NULL, OFN_HIDEREADONLY, szFilter); |
| | | dlg.m_ofn.lpstrTitle = _T("Save Image"); |
| | | |
| | | if(dlg.DoModal() == IDOK) |
| | | { |
| | | if (SaveImage(dlg.GetPathName())) |
| | | { |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnCenterLine() |
| | | { |
| | | m_bDrawCenterLine = !m_bDrawCenterLine; |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::OnRuler() |
| | | { |
| | | m_bDrawRuler = !m_bDrawRuler; |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::OnViewOrigin() |
| | | { |
| | | m_nDrawMode = 0; |
| | | |
| | | SetDrawMode(m_nDrawMode); |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::OnViewFit() |
| | | { |
| | | m_nDrawMode = 1; |
| | | |
| | | SetDrawMode(m_nDrawMode); |
| | | Invalidate(TRUE); |
| | | } |
| | | |
| | | void CCameraImageView::OnViewColor() |
| | | { |
| | | if (m_OriginImage.GetChannels()==1) |
| | | { |
| | | m_nViewBand = BandTypeGray; |
| | | return; |
| | | } |
| | | |
| | | if (m_nViewBand == BandTypeColor) return; |
| | | |
| | | if (m_OriginImage.CopyImageTo(this)) |
| | | { |
| | | m_nViewBand = BandTypeColor; |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnViewGray() |
| | | { |
| | | if (m_nViewBand == BandTypeGray) return; |
| | | |
| | | if (m_OriginImage.GetBandImage(BandTypeGray, this)) |
| | | { |
| | | m_nViewBand = BandTypeGray; |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnViewRed() |
| | | { |
| | | if (m_OriginImage.GetChannels()==1) |
| | | { |
| | | m_nViewBand = BandTypeGray; |
| | | return; |
| | | } |
| | | |
| | | if (m_nViewBand == BandTypeRed) return; |
| | | |
| | | if (m_OriginImage.GetBandImage(BandTypeRed, this)) |
| | | { |
| | | m_nViewBand = BandTypeRed; |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnViewGreen() |
| | | { |
| | | if (m_OriginImage.GetChannels()==1) |
| | | { |
| | | m_nViewBand = BandTypeGray; |
| | | return; |
| | | } |
| | | |
| | | if (m_nViewBand == BandTypeGreen) return; |
| | | |
| | | if (m_OriginImage.GetBandImage(BandTypeGreen, this)) |
| | | { |
| | | m_nViewBand = BandTypeGreen; |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::OnViewBlue() |
| | | { |
| | | if (m_OriginImage.GetChannels()==1) |
| | | { |
| | | m_nViewBand = BandTypeGray; |
| | | return; |
| | | } |
| | | |
| | | if (m_nViewBand == BandTypeBlue) return; |
| | | |
| | | if (m_OriginImage.GetBandImage(BandTypeBlue, this)) |
| | | { |
| | | m_nViewBand = BandTypeBlue; |
| | | Invalidate(TRUE); |
| | | } |
| | | } |
| | | |
| | | void CCameraImageView::SetResolution(double dRes) |
| | | { |
| | | if (dRes<0.0) return; |
| | | |
| | | m_dResolution = dRes; |
| | | } |
| | | |
| | | void CCameraImageView::SetRulerGab(double dGab) |
| | | { |
| | | if (dGab<0.0) return; |
| | | |
| | | m_dRulerGab = dGab; |
| | | } |
| | | |