BMP파일이 아닌 다른 이미지 파일을 출력하는 함수에 관한 내용.
1. CImage를 사용하려면 atlImage.h를 인클루드 해야함.
2. 예제에서는 상대경로를 집어넣은지라 기본 경로가 해당 프로젝트가 있는 폴더 이지만 절대경로를 입력해주어도 됨.
3. 이 함수가 지원하는 형식은 BMP, JPEG/JPG, GIF , PNG 등임.
//////////////////////////////////////////////////////
프로젝트명은 ImgOutDemo
흔한SDI문서로 제작하고
Cpp파일의 선언부에 다음 코드를 추가하여 인클루드함.
다음으로 흔한 OnPaint를 작성하고 다음과 같이 코딩.
// CImgOutDemoView 메시지 처리기
////////////////////
이럴경우 이미지 파일을 어느 폴더에 위치시켜야 하냐면
평소처럼 res가 아닌 그 상위 폴더에 위치시켜야 출력이 된다.
기본 경로가 그리 정해져 있기 때문이다.
/////////////////////////
유사 함수로는 LoadFromResource()라는 메서드가 있다. 이는 이러이러하게 사용한다는 의미로 코드를 먼저 적으면..
//코드를 직접 적어야 하지만 책 내용이 그림파일까지 자기들 멋대로 정해두었으므로..
그래서 그림파일을 갈아치우자...
출력된 이미지에 CImage sample! 이라는 문구가 적혀서 출력됨을 알 수 있다.
이렇게 글씨를 그림 위에 쓰는것은 두가지 방법이 있는데
하나는 이미지 DC에 문자열을 출력하여 변경된 이미지를 화면 DC에 출력하는 법
하나는 화면 DC에 이미지를 출력한 다음 문자열을 화면 DC 출력하는 법 이 있다.
뭐가 다른지는 방법이 다른것이며 후에 쓰일때가 다르다고 한다.
현재 코드에서는 두번째 방법을 사용하고 있다.
CImage 클래스의 BitBlt함수는 자주 사용되므로 원형의 인자를 보도록 하자.
이번 코드에서는 첫번째 원형이 쓰였었다.
CImage::BitBlt( HDC hDestDC, int xDest, int yDest, DWORD dwROP = SRCCOPY) const throw();
CImage::BitBlt( HDC hDestDC, const POINT& pointDest, DWORD dwROP = SRCCOPY) const throw();
책에서는 그냥 강의나 보라고 한다.[3개월밖에 못보면서..] 혹은 msdn참조여 이러고 맘..
http://msdn.microsoft.com/ko-kr/library/c431046z(v=VS.90).aspx
2008버전 기준의 MSDN 링크.
표로 만들면 참 좋겠지만.. 혹시 링크 따라가기가 힘든 사람들을 위해 그냥 긁어서 붙여놓기라도 해두자.
이제 파일 업로드.
1. CImage를 사용하려면 atlImage.h를 인클루드 해야함.
2. 예제에서는 상대경로를 집어넣은지라 기본 경로가 해당 프로젝트가 있는 폴더 이지만 절대경로를 입력해주어도 됨.
3. 이 함수가 지원하는 형식은 BMP, JPEG/JPG, GIF , PNG 등임.
//////////////////////////////////////////////////////
프로젝트명은 ImgOutDemo
흔한SDI문서로 제작하고
Cpp파일의 선언부에 다음 코드를 추가하여 인클루드함.
//추가부분
#include <atlimage.h>
//종료
다음으로 흔한 OnPaint를 작성하고 다음과 같이 코딩.
// CImgOutDemoView 메시지 처리기
void CImgOutDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CString strImagePath = _T("IMG_0076.jpg");//로드할 이미지 파일의 경로
CImage Image;
HRESULT hResult = Image.Load(strImagePath);
if(FAILED(hResult))
{
CString strtmp = _T("ERROR: Failed to load ");
strtmp += strImagePath + _T("\n");
TRACE(strtmp);
return;
}
Image.BitBlt(dc.m_hDC, 0, 0);//화면 DC에 출력
}
////////////////////
이럴경우 이미지 파일을 어느 폴더에 위치시켜야 하냐면
평소처럼 res가 아닌 그 상위 폴더에 위치시켜야 출력이 된다.
기본 경로가 그리 정해져 있기 때문이다.
/////////////////////////
유사 함수로는 LoadFromResource()라는 메서드가 있다. 이는 이러이러하게 사용한다는 의미로 코드를 먼저 적으면..
void CImgOutDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CImage Image;
Image.LoadFromResource(AfxGetInstanceHandle(), IDB_Image_Test); //비트맵 리소스를 로드하여 DIB를 만든다.
CDC* pDC = CDC::FromHandle(Image.GetDC()); //비트맵 이미지에 대한 DC를 생성한다.
pDC->SetBkMode(TRANSPARENT);
pDC->TextOut(200, 30, TEXT("CImage sample!"));
Image.ReleaseDC(); //이 이미지DC에 문자열을 출력한다.
Image.BitBlt(dc.m_hDC, 0, 0); //이미지를 화면DC에 출력한다.
//화면DC에 문자열을 출력한다.
// dc.SetBkMode(TRANSPARENT);
// dc.TextOut(200, 30, TEXT("CImage sample!"));//이 부분은 왜 주석처리 할거면서 적는지 모르겠다.
}
//코드를 직접 적어야 하지만 책 내용이 그림파일까지 자기들 멋대로 정해두었으므로..
출력된 이미지에 CImage sample! 이라는 문구가 적혀서 출력됨을 알 수 있다.
이렇게 글씨를 그림 위에 쓰는것은 두가지 방법이 있는데
하나는 이미지 DC에 문자열을 출력하여 변경된 이미지를 화면 DC에 출력하는 법
하나는 화면 DC에 이미지를 출력한 다음 문자열을 화면 DC 출력하는 법 이 있다.
뭐가 다른지는 방법이 다른것이며 후에 쓰일때가 다르다고 한다.
현재 코드에서는 두번째 방법을 사용하고 있다.
CImage 클래스의 BitBlt함수는 자주 사용되므로 원형의 인자를 보도록 하자.
이번 코드에서는 첫번째 원형이 쓰였었다.
CImage::BitBlt( HDC hDestDC, int xDest, int yDest, DWORD dwROP = SRCCOPY) const throw();
CImage::BitBlt( HDC hDestDC, const POINT& pointDest, DWORD dwROP = SRCCOPY) const throw();
CImage::BitBlt( HDC hDestDC, int xDest, int yDest, int nDestWidth,
int nDestHeight, int xSrc, int ySrc, DWORD dwROP = SRCCOPY) const throw();
CImage::BitBlt( HDC hDestDC, const RECT& rectDest,
const POINT& pointSrc, DWORD dwROP = SRCCOPY) const throw();
책에서는 그냥 강의나 보라고 한다.[3개월밖에 못보면서..] 혹은 msdn참조여 이러고 맘..
http://msdn.microsoft.com/ko-kr/library/c431046z(v=VS.90).aspx
2008버전 기준의 MSDN 링크.
표로 만들면 참 좋겠지만.. 혹시 링크 따라가기가 힘든 사람들을 위해 그냥 긁어서 붙여놓기라도 해두자.
이제 파일 업로드.
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 11 컨트롤 윈도우의 기본 (0) | 2011.12.07 |
---|---|
Visual C++ 2008 MFC Chapter 8 비트맵 및 이미지 처리 - 4 (0) | 2011.12.06 |
Visual C++ 2008 MFC Chapter 8 비트맵 및 이미지 처리 - 2 (0) | 2011.12.06 |
Visual C++ 2008 MFC Chapter 8 비트맵 및 이미지 처리 (0) | 2011.12.05 |
Visual C++ 2008 MFC Chapter 7 GDI 실습예제 (0) | 2011.12.05 |