흠...
확실히 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

Posted by pkss
,