무언가 만들기 위한 지식/Win32/MFC
MFC BMP파일 출력하기(이미지 출력)
신럭키
2010. 2. 19. 02:07
기타 다른 프로그램에서는 사진 출력하기 간단했던 것같은데, 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)는 이미지 크기