bool SrcRectToDstRect(const RECT& srcRect, int nSrcW, int nSrcH, RECT& desRect, int nDesW, int nDesH)
{
if (nSrcW > 0 && srcRect.left >= 0 && srcRect.right >= 0)
{
desRect.left = (srcRect.left * nDesW + nSrcW/2)/ nSrcW;
desRect.right = (srcRect.right * nDesW + nSrcW/2)/ nSrcW;
}
else
{
desRect.left = 0;
desRect.right = 0;
}
if (nSrcH > 0 && srcRect.top >= 0 && srcRect.bottom >= 0)
{
desRect.top = (srcRect.top * nDesH + nSrcH/2)/ nSrcH;
desRect.bottom = (srcRect.bottom * nDesH + nSrcH/2)/ nSrcH;
}
else
{
desRect.top = 0;
desRect.bottom = 0;
}
desRect.left = max(desRect.left, 0);
desRect.right = max(desRect.right, 0);
desRect.top = max(desRect.top, 0);
desRect.bottom = max(desRect.bottom, 0);
desRect.left = min(desRect.left, nDesW);
desRect.right = min(desRect.right, nDesW);
desRect.top = min(desRect.top, nDesH);
desRect.bottom = min(desRect.bottom, nDesH);
return TRUE;
}