기타 다른 프로그램에서는 사진 출력하기 간단했던 것같은데, MFC를 사용하다보니 BMP 외부파일 출력하기 참 귀찮다.
(물론 필자가 MFC도 거의 처음이고 잘 몰라서 그렇다고 생각한다.)
그래서 급하게라도 사용했던 BMP 출력하는 법을 적어본다.
1. OnDraw나 Paint에서 CDC* pDC를 알고 있을때, 해당 DC에 외부 BMP파일을 출력하는 방법
2. Dialog에서 Picture Control을 설정한 상태, 그리고 리소스 뷰에서 BMP파일을 IMPORT한 상태일 경우
3. Dialog에서 Picture Control을 설정한 상태, 그리고 외부 BMP파일 불러오기.
결국, Picture Control을 이용하면 아주 코드가 간단해진다.
참고로 BitBlt를 사용하게 되면 크기가 원본 크기는 바뀌지 않고,
특정 Size에서 크기를 고정시키고 싶다면 StretchBlt를 사용하면 된다.
ex) 크기를 고정시키는 예제 [단 CDC * pDC를 알고 있어야 아래 처럼 활용 가능]
(물론 필자가 MFC도 거의 처음이고 잘 몰라서 그렇다고 생각한다.)
그래서 급하게라도 사용했던 BMP 출력하는 법을 적어본다.
1. OnDraw나 Paint에서 CDC* pDC를 알고 있을때, 해당 DC에 외부 BMP파일을 출력하는 방법
HANDLE bmp; CBitmap cBitmap; BITMAP bmpinfo; CDC memdc; bmp = LoadImage(NULL, "images/foodExplain.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); cBitmap.Attach( bmp ); cBitmap.GetBitmap( &bmpinfo ); memdc.CreateCompatibleDC(pDC); memdc.SelectObject(bmp); pDC->BitBlt(x,y,bmpinfo.bmWidth,bmpinfo.bmHeight, &memdc, 0 ,0, SRCCOPY); //x,y는 그리는 첫번째 위치 memdc.DeleteDC(); cBitmap.DeleteObject();위와같은 상태는 OnDraw나 Paint등에서 dc를 알고 있을 경우 출력이 가능하다.
2. Dialog에서 Picture Control을 설정한 상태, 그리고 리소스 뷰에서 BMP파일을 IMPORT한 상태일 경우
HBITMAP hBmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(SUGARBMP),IMAGE_BITMAP,0,0,LR_LOADMAP3DCOLORS); //SUGARBMP는 IMPORT된 BMP의 ID spices_img1.SetBitmap(hBmp);
3. Dialog에서 Picture Control을 설정한 상태, 그리고 외부 BMP파일 불러오기.
HBITMAP hBmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"images/noIMG.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); img1.SetBitmap(hBmp); //img1은 Picture Control의 ID, "images/noIMG.bmp"은 파일의 상대경로
결국, Picture Control을 이용하면 아주 코드가 간단해진다.
참고로 BitBlt를 사용하게 되면 크기가 원본 크기는 바뀌지 않고,
특정 Size에서 크기를 고정시키고 싶다면 StretchBlt를 사용하면 된다.
ex) 크기를 고정시키는 예제 [단 CDC * pDC를 알고 있어야 아래 처럼 활용 가능]
CBitmap cBitmap; BITMAP bmpinfo; CDC memdc; HANDLE bmp = LoadImage(NULL,"image/abcd.bmp",IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); cBitmap.Attach( bmp ); cBitmap.GetBitmap( &bmpinfo ); memdc.CreateCompatibleDC(pDC); memdc.SelectObject(bmp); //비트맵 화면 사진크기 맞추기 pDC->StretchBlt(x,y,cx,cy,&memdc,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY); memdc.DeleteDC(); cBitmap.DeleteObject(); //(x,y)는 시작위치, (cx,cy)는 이미지 크기
'무언가 만들기 위한 지식 > Win32/MFC' 카테고리의 다른 글
MFC SQL 연동하여 파일경로 저장시, Parsing Code (1) | 2010.02.20 |
---|---|
MFC OnTimer를 이용한 간단한 시계 (1) | 2010.02.20 |
MFC 버튼 스타일 바꾸기 (2) | 2010.02.19 |
MFC 메뉴창 삭제, 창 크기/위치 고정 (0) | 2010.02.19 |
MFC 프로그램 전체화면으로 전환하기(제목표시줄 삭제) (3) | 2010.02.19 |