• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

DC -> IplImage로 전환

Programming/OpenCV 2013. 8. 8. 13:49





화면에 무언갈 띄운다던가. 선을그리고 텍스트를 그리고


사각형을 그리고 원을그리고 이미지를 올리고 뭐 등등 이러한 여러가지 작업들을


DC 에 벌려 놓은 다음 그 DC를 파일로 저장 한다거나 IplImage로 혹은 cv::Mat 으로 


가져와서 다른 작업을 하고싶다거나.. 할때 변환을 해주는 함수.


해당 DC의 CDC 를 파라미터로 넘겨주면 해당 DC를 IplImage로 반환 해준다.




이렇게 사각형 박스안에 그림을 그리고 나서 


DCtoIplImage 함수를 불러주면 



뿅 하고 IplImage를 반환 해준다.


이를 확인하기 위해 NamedWindow를 통해 화면에 나타낸 것.



이런 작업을 위한 함수.



IplImage* CtestDlg::DCtoIplImage(CDC* pDC)

{

CRect rect;

    pDC->GetWindow()->GetClientRect(rect);

    int cx = rect.right - rect.left;

    int cy = rect.bottom - rect.top;

    if(cx <= 0 || cy <= 0) return NULL;

    HDC hMemDC;

    hMemDC = CreateCompatibleDC(pDC->m_hDC);

    BITMAPINFO    bmi;

    BITMAPINFOHEADER* bmih = &(bmi.bmiHeader);

    LPVOID        pBits;

    HBITMAP        hBitmap;

    ZeroMemory(bmih, sizeof(BITMAPINFOHEADER));

    bmih->biSize        = sizeof(BITMAPINFOHEADER);

    bmih->biBitCount    = 24;

    bmih->biWidth        = cx;

    bmih->biHeight        = cy;

    bmih->biPlanes        = 1;

    hBitmap = CreateDIBSection(pDC->m_hDC, &bmi, DIB_RGB_COLORS, (LPVOID*)&pBits, NULL, 0);

    SelectObject(hMemDC, hBitmap);

    BitBlt(hMemDC, 0, 0, cx, cy, pDC->m_hDC, rect.left, rect.top, SRCCOPY);

    DeleteDC(hMemDC);

   

    hMemDC = NULL;

    bool bMustRelease = false;

    const int nDepth = IPL_DEPTH_8U;

    const int nChannels = 3;

    

    if(hMemDC == NULL)

    {

        hMemDC = ::GetDC(NULL);

        bMustRelease = true;

    }

    IplImage* img = NULL;

    if(GetDIBits(hMemDC, hBitmap, 0, 0, NULL, &bmi, DIB_RGB_COLORS))

    {

        int nHeight = (bmih->biHeight > 0) ? bmih->biHeight : -bmih->biHeight;

        img = cvCreateImage(cvSize(bmih->biWidth, nHeight), nDepth, nChannels);

        img->origin = (bmih->biHeight > 0);

        bmih->biBitCount = (WORD)(img->nChannels * 8);

        bmih->biCompression = BI_RGB;

        GetDIBits(hMemDC, hBitmap, 0, nHeight, img->imageData, &bmi, DIB_RGB_COLORS);

    }

    if(bMustRelease) ::ReleaseDC(NULL, hMemDC);


    DeleteObject(hBitmap);

    return img;

}

저작자표시 비영리 (새창열림)

'Programming > OpenCV' 카테고리의 다른 글

[Function] 영상을 회전 시키기  (0) 2014.01.23
[Function] IplImage 에 한글text 삽입하기  (1) 2013.11.07
cv::Mat Class 사용법  (0) 2013.05.06
OpenCV 주요함수  (0) 2013.04.29
cvHoughLines2 함수를 이용한 직선 검출  (0) 2013.04.29
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

카테고리

  • 살다보니.. (449)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • LIBSVM
  • portugal
  • 에누리닷컴
  • 딥러닝
  • 스마트체험단
  • ColorMeRad
  • random variable
  • 갤럭시노트3
  • DSLR
  • 포르투갈
  • Computer Tip
  • DeepLearning
  • 오봉자싸롱
  • 매트랩 함수
  • Convolutional Neural Networks
  • function
  • SVM
  • 칼로리 대폭발
  • ReadString
  • Deep Learning
  • 후쿠오카
  • matlab function
  • matlab
  • utility
  • 크롬
  • 일본
  • CStdioFile
  • 큐슈
  • review
  • 매트랩

달력

«   2025/06   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
06-16 13:39

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바