Zooming In on a Selection: Step 5

/* Use the mouse position's percentage offsets in the image rectangle 
to determine the pixel offsets in the bitmap. 
Using percentages allows for the possibility that the image is zoomed. */ 
EndPixelX = MulDiv(LeadBitmap.GetWidth(), EndGDIX - rLeadDest.left, DisplayWidth); 
EndPixelY = MulDiv(LeadBitmap.GetHeight(), EndGDIY - rLeadDest.top, DisplayHeight); 
/* Do nothing if no area is defined */ 
if ((EndPixelX == StartPixelX) || (EndPixelY == StartPixelY)) 
   return; 
/* Get the source rectangle coordinates for painting. 
Allow for different mouse drag directions */ 
if (StartGDIX < EndGDIX) 
{ 
   rLeadSource.left = StartPixelX; 
   rLeadSource.right = EndPixelX; 
} 
else 
{ 
   rLeadSource.left = EndPixelX; 
   rLeadSource.right = StartPixelX; 
} 
if (StartGDIY < EndGDIY) 
{ 
   rLeadSource.top = StartPixelY; 
   rLeadSource.bottom = EndPixelY; 
} 
else 
{ 
   rLeadSource.top = EndPixelY; 
   rLeadSource.bottom = StartPixelY; 
} 
::GetClientRect(this->m_hWnd, &rClientSize); 
/* Use this function to center the cropped display in the client area. */ 
CalcDisplay (rClientSize.right, /* Width allowed */ 
rClientSize.bottom, /* Height allowed */ 
rLeadSource.right - rLeadSource.left, /* Width factor, for aspect ratio */ 
rLeadSource.bottom - rLeadSource.top, /* Height factor, for aspect ratio */ 
&DisplayLeft, /* Resulting left value, for centering */ 
&DisplayTop, /* Resulting top value, for centering */ 
&DisplayWidth, /* Resulting width value */ 
&DisplayHeight); /* Resulting height value */ 
/* Set the destination rectangle for painting */ 
SetRect(&rLeadDest, 
DisplayLeft, DisplayTop, 
DisplayLeft + DisplayWidth, 
DisplayTop + DisplayHeight); 
/* If necessary, translate the source rectangle to the bitmap's view perspective */ 
if (LeadBitmap.GetViewPerspective() != TOP_LEFT) 
   LeadBitmap.RectToBitmap(TOP_LEFT, &rLeadSource); 
/* Repaint the whole client area */ 
::InvalidateRect(this->m_hWnd,NULL,TRUE); 
CView::OnLButtonUp(nFlags, point); 
/*---[CalcDisplay]----------------------------------------------------------- 
Parameters: WidthAllowed Maximum width 
HeightAllowed Maximum height 
WidthFactor For preserving aspect ratio, usually bitmap width 
HeightFactor For preserving aspect ratio, usually bitmap height 
*ResultLeft Pass NULL if you do not care about centering 
Otherwise, this is updated with the X offset 
*ResultTop Pass NULL if you do not care about centering 
Otherwise, this is updated with the Y offset 
*ResultWidth Address of the width variable to update 
*ResultHeight Address of the height variable to update 
Notes: Use this function to fit a displayed image in a particular 
space, while preserving the aspect ratio. 
--------------------------------------------------------------------------*/ 
void CTt2View::CalcDisplay (L_INT WidthAllowed, L_INT HeightAllowed, 
L_INT WidthFactor, L_INT HeightFactor, 
L_INT *ResultLeft, L_INT *ResultTop, 
L_INT *ResultWidth, L_INT *ResultHeight) 
{ 
   /* Local variables for calculating results */ 
   L_INT Left, Top, Width, Height; 
   /* 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 = (HeightAllowed - Height) / 2; 
   } 
   else 
   { /* Use the maximum height, and calculate the width and left values */ 
      Top = 0; 
      Height = HeightAllowed; 
      Width = MulDiv(Height, WidthFactor, HeightFactor); 
      Left = (WidthAllowed - Width) / 2; 
   } 
   /* Update the top and left results, if the caller did not pass NULL */ 
   if (ResultTop != NULL) 
      *ResultTop = Top; 
   if (ResultLeft != NULL) 
      *ResultLeft = Left; 
   /* Update the width and height results */ 
   *ResultWidth = Width; 
   *ResultHeight = Height; 
   return; 
} 

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS Raster Imaging C++ Class Library Help