임프님이 썸네일 만드는 방법에 대해서 다양하게 소개해 주셨는데요.
ScaleImage라는 함수가 있다는 것을 처음 알게 되었습니다.
제가 알고 있는 또다른 썸네일 만드는 방법을 공유해 볼까 합니다.
저의 경우에는 C++빌더와 비주얼 C++을 같이 작업하는 경우가 있어서 될 수 있으면 서로 호환이 가능한 코드로 작성하게 됩니다. TCanvas보다는 DC를 다루는 편에 익숙해 있습니다. StretchBlt라는 함수를 이용하여 축소/확대하는 방법이 있는데. 그냥 사용하면 아주 품질이 좋지 않은 결과가 나옵니다. 하지만, SetStretchBltMode함수를 같이 사용하면 고품질로 축소/확대가 가능합니다.
void __fastcall MakeThumb( Graphics::TBitmap *srcBmp, Graphics::TBitmap *thumbBmp, int thumbSize/*width*/ )
{
int thumbWidth = thumbSize;
int thumbHeight = srcBmp->Height * thumbWidth / srcBmp->Width; //비율을 맞춤
thumbBmp->SetSize( thumbWidth, thumbHeight );
HDC srcDC = srcBmp->Canvas->Handle;
HDC thumbDC = thumbBmp->Canvas->Handle;
SetStretchBltMode( thumbDC, HALFTONE );
StretchBlt( thumbDC, 0, 0, thumbBmp->Width, thumbBmp->Height, srcDC, 0, 0, srcBmp->Width, srcBmp->Height, SRCCOPY );
}
제가 만든 샘플에서는 StretchBlt(HALFTONE)을 사용하는 방법보다는 ScaleImage를 사용하는 방법이 속도가 더 좋습니다.
파일이나 Bitmap을 직접 축소/확대할 때는 ScaleImage이라는 함수가 더 편할 것이고, 그냥 화면에 보여주는 용도라면은 StretchBlt(HALFTONE) 방법이 더 편할수도 있을 것 같습니다.
|