Fitting an Image to a Window

If you are using the high-level LBitmapWindow (or derived) class, you can use the LBitmapWindow::SetZoomMode function to zoom an image in the following manners:

Zoom Mode Description
ZOOM_FIT to fit the bitmap in the window while maintaining the aspect ratio.
ZOOM_STRETCH to stretch the bitmap to the window.
ZOOM_NORMAL to display the bitmap in its normal size.
ZOOM_FITWIDTH to fit the bitmap to the width of the window.
ZOOM_FITHEIGHT to fit the bitmap to the height of the window.

You can also use LBitmapWindow::FitToParent to fit the class object's window to its parent.

If you are not using LBitmapWindow, to fit an image to a window, you only have to calculate a display rectangle that fits the window's client area, while preserving the image's aspect ratio. The following code snippets show how this can be done.

LBitmapBase LeadBitmap; //bitmap for the loading image 
RECT rWndSize; 
RECT rClientSize; 
RECT rLeadDest; 
L_INT WidthAllowed; 
L_INT HeightAllowed; 
L_INT WidthFactor; 
L_INT HeightFactor; 
L_INT Left, Top, Width, Height; 
L_INT nRet; 
 
/* Load the LEAD DLLs */ 
LBase LeadBase; 
LeadBase.LoadLibraries(LT_ALL_LEADLIB); 
 
/* Load an image */ 
nRet = LeadBitmap.Load(TEXT("v:\\images\\eagle.cmp"), 8); 
 
/* Get the current window size and client area */ 
::GetWindowRect(this->m_hWnd, &rWndSize); 
::GetClientRect(this->m_hWnd,&rClientSize); 
 
/* Use this to fit the displayed image in the client area. */ 
WidthAllowed = rClientSize.right; 
HeightAllowed = rClientSize.bottom; 
WidthFactor = LeadBitmap.GetWidth(); 
HeightFactor = LeadBitmap.GetHeight(); 
 
/* See if using the maximum width will make the image too tall */ 
if(MulDiv(WidthAllowed, HeightFactor, WidthFactor) < HeightAllowed) 
{ 
   /* Use the maximum width, and calculate the height and top values */ 
   Left = 0; 
   Width = WidthAllowed; 
   Height = MulDiv(Width, HeightFactor, WidthFactor); 
   Top = 0; 
} 
else 
{ 
   /* Use the maximum height, and calculate the width and left values */ 
   Top = 0; 
   Height = HeightAllowed; 
   Width = MulDiv(Height, WidthFactor, HeightFactor); 
   Left = 0; 
} 
 
RECT rc; 
/* Set the source rectangle to use the whole bitmap */ 
SetRect(&rc, 0, 0, LeadBitmap.GetWidth(), LeadBitmap.GetHeight()); 
LeadBitmap.SetSrcRect(&rc); 
 
/* Set the source clipping rectangle to use the whole bitmap */ 
LeadBitmap.SetClipSrcRect(&rc); 
 
/* Set the destination rectangles */ 
SetRect(&rLeadDest, Left, Top, Width, Height); 
LeadBitmap.SetDstRect(&rLeadDest); 
LeadBitmap.SetClipDstRect(&rLeadDest); 
 
/* paint the image */ 
HDC hDC = ::GetDC(this->m_hWnd); 
LeadBitmap.Paint()->SetDC(hDC); 
LeadBitmap.Paint()->PaintDC(); 
::ReleaseDC(this->m_hWnd, hDC); 

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Raster Imaging C++ Class Library Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.