有时我们在一个区域绘制一张图片,如果强制绘制,会失图片失真,所以自己写了一个简单算法,计算在当前区域下,按图片比例显示的区域为多大,居中
代码如下:
BOOL MeetRect(CRect &rc, CSize szPic)
{
int x, y, w, h;
int nWidth = rc.Width();
int nHeight = rc.Height();
if(nWidth > 0 && szPic.cx > 0)
{
// Get Meet Rect
if(szPic.cx > nWidth || szPic.cy > nHeight)
{
const float fRatio = (float)nHeight / nWidth;
const float fPicRatio = (float)szPic.cy / szPic.cx;
if(fPicRatio > fRatio)
{
w = (int)(((float)nHeight) / fPicRatio);
h = nHeight;
x = rc.left + (nWidth - w) / 2;
y = rc.top;
}
else
{
w = nWidth;
h = (int)(((float)nWidth )* fPicRatio);
x = rc.left;
y = rc.top + (nHeight - h) / 2;
}
}
else
{
w = szPic.cx;
h = szPic.cy;
x = rc.left + (nWidth - w) / 2;
y = rc.top + (nHeight - h) / 2;
}
rc.SetRect(x, y, x + w, y + h);
return TRUE;
}
return FALSE;
}