Fitting an Image to a Window (original) (raw)

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);

LEADTOOLS Raster Imaging C++ Class Library Help