StretchBlt(pDC->m_hDC,0,0,rect.right-rect.left,rect.bottom-rect.top,pDoc->memDC.m_hDC,0,0,Image.Width,Image.Height,SRCCOPY);
来缩放的话,如果图片和显示区域的长宽比不一样,那么图片的长宽比就会变形。
那么如果我要在所放的时候,保持图片的长宽比,应该怎么办呢?
还是只能够自己手动计算应该缩放的区域,然后调整缩放范围呢?
3 个解决方案
#1
只能自己手动计算,因为参数里面就没有控制缩放比例的接口
你可以使用setviewportorg等等那几个函数实现视觉上的等比例缩放
你可以使用setviewportorg等等那几个函数实现视觉上的等比例缩放
#2
自己计算
#3
BITMAP bmHeader;
pBitmap->GetBitmap(&bmHeader)
//计算按原图比例缩小后的图片的大小
nWidth=bmHeader.bmWidth;
nHeight=bmHeader.bmHeight;
if (nWidth>nHeight && nWidth>rect.Width())
//如果原图宽度大于高度,且比显示区域的宽度大
{
float zoom=(float)nHeight/(float)nWidth;
nWidth=rect.Width();
nHeight=(int)(zoom * nWidth);
}
else if(nHeight > nWidth && nHeight > rect.Height())
//如果原图高度大于宽度,且比显示区域的高度大
{
float zoom=(float)nWidth/nHeight;
nHeight=rect.Height();
nWidth=(int)(zoom * nHeight);
}
pBitmap->GetBitmap(&bmHeader)
//计算按原图比例缩小后的图片的大小
nWidth=bmHeader.bmWidth;
nHeight=bmHeader.bmHeight;
if (nWidth>nHeight && nWidth>rect.Width())
//如果原图宽度大于高度,且比显示区域的宽度大
{
float zoom=(float)nHeight/(float)nWidth;
nWidth=rect.Width();
nHeight=(int)(zoom * nWidth);
}
else if(nHeight > nWidth && nHeight > rect.Height())
//如果原图高度大于宽度,且比显示区域的高度大
{
float zoom=(float)nWidth/nHeight;
nHeight=rect.Height();
nWidth=(int)(zoom * nHeight);
}
#1
只能自己手动计算,因为参数里面就没有控制缩放比例的接口
你可以使用setviewportorg等等那几个函数实现视觉上的等比例缩放
你可以使用setviewportorg等等那几个函数实现视觉上的等比例缩放
#2
自己计算
#3
BITMAP bmHeader;
pBitmap->GetBitmap(&bmHeader)
//计算按原图比例缩小后的图片的大小
nWidth=bmHeader.bmWidth;
nHeight=bmHeader.bmHeight;
if (nWidth>nHeight && nWidth>rect.Width())
//如果原图宽度大于高度,且比显示区域的宽度大
{
float zoom=(float)nHeight/(float)nWidth;
nWidth=rect.Width();
nHeight=(int)(zoom * nWidth);
}
else if(nHeight > nWidth && nHeight > rect.Height())
//如果原图高度大于宽度,且比显示区域的高度大
{
float zoom=(float)nWidth/nHeight;
nHeight=rect.Height();
nWidth=(int)(zoom * nHeight);
}
pBitmap->GetBitmap(&bmHeader)
//计算按原图比例缩小后的图片的大小
nWidth=bmHeader.bmWidth;
nHeight=bmHeader.bmHeight;
if (nWidth>nHeight && nWidth>rect.Width())
//如果原图宽度大于高度,且比显示区域的宽度大
{
float zoom=(float)nHeight/(float)nWidth;
nWidth=rect.Width();
nHeight=(int)(zoom * nWidth);
}
else if(nHeight > nWidth && nHeight > rect.Height())
//如果原图高度大于宽度,且比显示区域的高度大
{
float zoom=(float)nWidth/nHeight;
nHeight=rect.Height();
nWidth=(int)(zoom * nHeight);
}