'CxImage'에 해당되는 글 2건

  1. 2009.03.18 CxImage 라이브러리 함수
  2. 2009.03.18 기본 시작 함수
Study/CxImage2009. 3. 18. 15:27

Jitter 효과(View 클래스)

  - 메뉴에 사용자 메뉴를 만든 후 관련 함수 생성.

  - 코드삽입

   CKDY013Doc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);

   // Jitter() 함수 호출
   long radius = 4;
   pDoc->m_pImage->Jitter(radius);

   //화면 갱신
   Invalidate(FALSE);

 

클립보드 복사(Doc 클래스)

  - 새로운 함수 생성 후 코드 삽입

  - 매개변수 CxImage* pCopyImage

   HANDLE hDIB = m_pCopyImage->CopyToHandle();

   // 클립보드 열기
   if(::OpenClipboard(AfxGetMainWnd()->GetSafeHwnd()))
   {
    // 클립보드 초기화
    if(::EmptyClipboard())
    {
     // 클립보드에 전송
     if(::SetClipboardData(CF_DIB, hDIB) == NULL)
     {
      AfxMessageBox("클립보드 데이타 전송 오류");
     }
    }
   }
   // 클립보드 닫기
   ::CloseClipboard();

 

  - ID_EDIT_COPY 아이디 함수 재정의 후 코드 삽입 (View 클래스)

 

   CKDY013Doc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);

   // 클립보드에 복사하기
   pDoc->CopyClipBoard(pDoc->m_pImage);

 

클립보드 붙이기(App 클래스)

  - ID_EDIT_PASTE 아이디 함수 재정의 후 코드 삽입

   POSITION pos = GetFirstDocTemplatePosition();
   CDocTemplate *pTemplate = GetNextDocTemplate(pos);

   CKDY013Doc* pDoc = (CKDY013Doc*)pTemplate->OpenDocumentFile(NULL);
 
   if(pDoc)
   {
    HANDLE hBitmap = NULL;
 
    // 클립보드에서 데이터 가져오기
    if(::OpenClipboard(AfxGetMainWnd()->GetSafeHwnd()))
    {
     hBitmap = ::GetClipboardData(CF_DIB);
    }
 
    if(hBitmap)
    {
     // 클립보드에서 얻은 데이터로부터 CxImage 생성
     pDoc->m_pImage = new CxImage();
   
     pDoc->m_pImage->CreateFromHANDLE(hBitmap);
   
     POSITION pos = pDoc->GetFirstViewPosition();
   
     CKDY013View *pView = (CKDY013View*)pDoc->GetNextView(pos);
   
     CSize sizeTotal = CSize(pDoc->m_pImage->GetWidth(), pDoc->m_pImage->GetHeight());
   
     pView->SetScrollSizes(MM_TEXT, sizeTotal);
     pView->ResizeParentToFit(FALSE);
    }
    // 클립보드 닫기
    ::CloseClipboard();
   }

 

  - ID_EDIT_PASTE 아이디의 Update함수 추가 후 코드 삽입

   if(!IsClipboardFormatAvailable(CF_DIB))
   {
    pCmdUI->Enable(FALSE);
   }

 

'Study > CxImage' 카테고리의 다른 글

컬러 공간 분석  (0) 2009.03.23
CxImage 제공 함수  (0) 2009.03.18
라이브러리 함수 사용자 작성  (0) 2009.03.18
기본 시작 함수  (0) 2009.03.18
CxImage 소개 및 기본 설치  (0) 2009.03.11
Posted by 열ㅇl
Study/CxImage2009. 3. 18. 13:58

영상 파일을 읽어 오기 (Doc 클래스)

  - CxImage* m_pImage 변수 정의

  - 가상함수 정의창에서 OnOpenDocument() 함수 재정의

  - 코드 삽입

   m_pImage = new CxImage();
   m_pImage->Load(lpszPathName, 0);

 

종료시 메모리 해제 (Doc 클래스)

  - 가상함수 정의창에서 DeleteContents()함수 재정의

  - 코드삽입

     if(m_pImage)
    {
      delete m_pImage;
    }

 

파일 열기 함수 (App 클래스)

  - Class Wizard에서 ID_FILE_OPEN 선택후 OnFileOpen() 함수 재정의.

  - 메시지 맵에서 ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) 주석처리

  - 코드 삽입

   char szFilter[] = "지원 영상처리 파일(*.bmp, *.jpg, *.gif, *.png, *.tif) |*.bmp; *.jpg; *.gif; *.png; *.tif|| ";
   CFileDialog fileDlg(TRUE, NULL, NULL, OFN_EXPLORER | OFN_HIDEREADONLY, szFilter);

   if(fileDlg.DoModal() == IDOK)
   {
      OpenDocumentFile(fileDlg.GetPathName());
   }

 

영상 출력하기 (View 클래스)

  - OnDraw()함수에 코드 삽입

  if(pDoc->m_pImage)
  {
    CRect rect = CRect(0, 0, (int)pDoc->m_pImage->GetWidth(), (int)pDoc->m_pImage->GetHeight());
    GetClientRect(&rect);

    pDoc->m_pImage->Draw(pDC->GetSafeHdc(), rect, 0);
  }

 

영상 크기에 따른 스크롤 지원하기 (View 클래스)

  - OnInitialUpdate() 함수에 코드삽입

    CKDY013Doc* pDoc = GetDocument();

    CScrollView::OnInitialUpdate();

    CSize sizeTotal;
    if(pDoc->m_pImage)
    {
        sizeTotal = CSize(pDoc->m_pImage->GetWidth(),
        pDoc->m_pImage->GetHeight());
    }
    else
    {
       sizeTotal.cx = sizeTotal.cy = 100;
    }

    SetScrollSizes(MM_TEXT, sizeTotal);
    ResizeParentToFit(FALSE);

 

처음 실행시 나타나는 창 제거하기 (App 클래스)

  - Instantance() 함수 ParseCommandLine(cmdInfo); 다음에 코드 삽입

    CKDY013Doc* pDoc = GetDocument();

    CScrollView::OnInitialUpdate();

    CSize sizeTotal;


    if(pDoc->m_pImage)
    {
        sizeTotal = CSize(pDoc->m_pImage->GetWidth(),
        pDoc->m_pImage->GetHeight());
    }
    else
    {
       sizeTotal.cx = sizeTotal.cy = 100;
    }

    SetScrollSizes(MM_TEXT, sizeTotal);
    ResizeParentToFit(FALSE);

 

드래그 앤 드롭으로 영상 파일 열기 (APP 클래스)

  - Instantance() 함수  if (!ProcessShellCommand(cmdInfo)) return FALSE; 다음에 코드 삽입

  pMainFrame->DragAcceptFiles();

 

영상의 크기에 맞춰 보여주기 (Frame 클래스)

  - 가상함수 정의창에서 ActivateeFrame 함수 선택

  - Frame 클래스에 Doc헤더파일 추가

  - 코드 삽입

   CRect rect, rectClient;
   GetWindowRect(&rect);
   GetClientRect(&rectClient);

   CxImage *m_pImage = ((CKDY013Doc *)GetActiveDocument())->m_pImage;

   if(m_pImage)
   {
     int height = (int)m_pImage->GetHeight() + rect.Height() - rectClient.Height() + 5;
     int width = (int)m_pImage->GetWidth() + rect.Width() - rectClient.Width() + 5;

     SetWindowPos(NULL, 0, 0, width, height, SWP_NOMOVE | SWP_SHOWWINDOW);
   }

 

영상 저장(Doc 클래스)

  - 가상함수 정의창에서 OnSaveDocument() 함수 재정의.

  - 코드 삽입

   int format_type = 0;
 
   // 확장자명을 찾기
   char *ext = (char*)strstr(lpszPathName, ".");

  // 소문자로 변환하기
   ext = strlwr(ext);
 
  // 확장자명을 기준으로 저장한다.
   if(!strcmp(ext, ".bmp"))
   {
      format_type = CXIMAGE_FORMAT_BMP;
   }
   else if(!strcmp(ext, ".gif"))
  {
      format_type = CXIMAGE_FORMAT_GIF;
  }
  else if(!strcmp(ext, ".jpg"))
  {
     format_type = CXIMAGE_FORMAT_JPG;
  }
  else if(!strcmp(ext, ".png"))
  {
     format_type = CXIMAGE_FORMAT_PNG;
  }
  else
  {
     AfxMessageBox("CXIMAGE_FORMAT을 확인하여 주십시요.", MB_OK |

                              MB_ICONSTOP);
     return TRUE;
  }
 
  return m_pImage->Save(lpszPathName, format_type);

 

'Study > CxImage' 카테고리의 다른 글

컬러 공간 분석  (0) 2009.03.23
CxImage 제공 함수  (0) 2009.03.18
라이브러리 함수 사용자 작성  (0) 2009.03.18
CxImage 라이브러리 함수  (0) 2009.03.18
CxImage 소개 및 기본 설치  (0) 2009.03.11
Posted by 열ㅇl