기존의 이미지를 출력하는 방식이 아닌
MFC에서 추가된 CImage를 사용해 보자.
// View::OnPaint()
// 이미지가 저장된 위치
CString strImagePath = _T("Image.bmp");
// CImage 클래스 변수를 생성한다.
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.TransparentBlt( dc.m_hDC, 0, 0, Image.GetWidth(), Image.GetHeight(), RGB(255, 0, 0) );
Image.BitBlt( dc.m_hDC, 300, 0 );
// 흑백으로 변경해 보자.
COLORREF rgb;
for( int x=0; x<Image.GetWidth(); ++x )
{
for( int y=0; y<Image.GetHeight(); ++y )
{
rgb = Image.GetPixel( x, y );
RGBtoGray( rgb );
Image.SetPixel( x, y, rgb );
}
}
// 흑백의 이미지 출력
Image.BitBlt( dc.m_hDC, 0, 300 );
소스 코드 자체가 딱히 어려운 부분은 없다. 마지막에 흑백으로 출력 하는 부분이 있는데,
RGBtoGray라는 부분은 inline으로 선언되 있다.
// View.cpp
inline void RGBtoGray( COLORREF& rgb )
{
BYTE byGray = (GetRValue(rgb) * 30
+ GetGValue(rgb) * 59
+ GetGValue(rgb) * 11 ) / 100;
rgb = RGB(byGray, byGray, byGray);
}
흑백으로 변경하는 알고리즘은 거의 공식화 되어 있다고 하니 그냥 단순하게 기억해 두자.
CImage에서는 bmp뿐만 아니라 jpg, gif, png등이 있다고 한다.
CImage를 사용하기 위해서는 반드시
#include <atlimage.h> 를 해 주어야 한다.
// 실행 화면
단점은, 이미지에 대해서 모든 픽셀을 변경해서 다시 픽셀을 설정해 주기 때문에, 예제 처럼 WM_PAINT에서 매번 처리하기에는 비효율 적이다.
WM_CREATE나 또는 한번만 불러오게 변경하여, 추가 이미지를 생성하여 그 안에 변경후 저장해 두는 것이 훨씬 나은 구현 방법일 것이다.
'프로그래밍 > MFC' 카테고리의 다른 글
MFC-TextRgn( 게이지에 따른 텍스트 변화 ) (0) | 2010.05.19 |
---|---|
MFC-CImage( 스크린 샷 찍기 ) (0) | 2010.05.17 |
MFC-비트맵 띄우기 (0) | 2010.05.16 |
MFC-가상 버튼 만들기 (0) | 2010.05.16 |
MFC-부채꼴 그리기 (0) | 2010.05.16 |