흠...
확실히 CImage 클래스는 쓸만한 구석이 많다.
CImage 를 이용하면 이미지 로딩은 물론 이고
지정한 포맷의 이미지 파일을 만드는것 또한 간단히 할수 있다.
더 이상 이미지 포맷 변경에 알씨( ALSee )를 사용하지 않아도 된다는 거다!!!
- 알씨에 악 감정이 있는 건 아니다. 쩝...
제목은 일단 'CImage 를 이용한 이미지 파일 포맷 변환' 이라 적어 두었는데
사실 여기서 다룰 내용은
1. 이미지 파일 를 로딩하고
2. 로딩한 이미지의 특정 영역을 지정한뒤
3. 그것을 다시 또 다른 이미지 파일에 저장하는 것이다.
//--------------------------------------------------------------------------------------------
// 원본이미지의 특정 영역을 하나의 이미지로 만든다
//--------------------------------------------------------------------------------------------
BOOL MakeCellFrameImage( LPCTSTR InSourceImageFileName, LPCTSTR InDestImageFileName,
const CRect& InTagetRect, REFGUID InImageFormatToMake )
{
CImage TempSourceImage;
CImage TempDestImage;
CRect TempTargetRect = InTagetRect;
//-------------------------------------------------
// 1. 원본 이미지를 TempSourceImage에 로딩
//-------------------------------------------------
TempSourceImage.Load( InSourceImageFileName );
CDC* pSourceDC = CDC::FromHandle( TempSourceImage.GetDC() ); // 원본 이미지의 DC를 얻는다
//-------------------------------------------------
// 2. 파일로 만들 이미지 객체 TempDestImage 생성
//-------------------------------------------------
int BitPerPixel = pSourceDC->GetDeviceCaps( BITSPIXEL );
TempDestImage.Create( TempTargetRect.Width(), TempTargetRect.Height(), BitPerPixel );
CDC* pDestDC = CDC::FromHandle( TempDestImage.GetDC() );
if( !pSourceDC || !pDestDC )
{ return FALSE; }
//---------------------------------------------------------------------
// 3. 타겟 DC( 만들 이미지의 DC )에 원본 이미지 DC 의 내용을 를 쓴다
//--------------------------------------------------------------------
pDestDC->BitBlt( 0, 0, TempTargetRect.Width(), TempTargetRect.Height(),
pSourceDC, TempTargetRect.left, TempTargetRect.top, SRCCOPY );
TempDestImage.ReleaseDC();
TempSourceImage.ReleaseDC();
//--------------------------------------------------------
// 4. 이미지 파일로 저장
//-------------------------------------------------------
TempDestImage.Save( InDestImageFileName, InImageFormatToMake );
return TRUE;
}
테스트 삼아 만든 함수인데 보다시피 별것 없다.
하여간 함수 마지막 부분에 이미지를 저장할때 호출하는 CImage::Save() 함수가 나오는데
이때 이 함수의 2번째 인자로 어떤 이미지 포맷으로 저장할지를 결정할수 있다.
The file type to save the image as. Can be one of the following:
-
ImageFormatBMP An uncompressed bitmap image.
-
ImageFormatPNG A Portable Network Graphic (PNG) compressed image.
-
ImageFormatJPEG A JPEG compressed image.
-
ImageFormatGIF A GIF compressed image.
만일 BMP 포맷의 이미지 파일을 만들고 싶다면 다음과 같이 하면된다.
...
Image.Save( "Test", Gdiplus::ImageFormatBMP );
...
하여간 이상.
[ 출처 ] MSDN
http://blog.naver.com/kzh8055?Redirect=Log&logNo=140100162253
http://msdn.microsoft.com/en-us/library/bwea7by5%28VS.80%29.aspx
'MFC' 카테고리의 다른 글
inet_addr() 인터넷 주소 변환 (0) | 2011.04.12 |
---|---|
유니코드(문자 인코딩, MBCS, UNICODE) (0) | 2011.04.08 |
프로그램 실행시키기(실행이 끝날 때까지 대기) (0) | 2011.04.08 |
AfxMessageBox 총 정리!! (0) | 2011.04.08 |
[MFC] 프로그램 안에서 외부 파일을 실행시키기(WinExec, ShellExecute, CreateProcess) (0) | 2011.04.08 |