在编写界面程序和处理图片时,时常遇到要等比缩放到某个指定范围,一般根据长宽比的判断进行处理;

例如:在Kinect操作中Body数据的范围为512424,而Color的区域为19201080,对于Body要在1920*1080的范围内等比放大才能重叠。并且要对Body进行放大后裁剪,而Body数据中的点要换算后才能跟Color画面中的物体位置进行比较。
///
/// 获取某个点,在按比例缩放填充区域的坐标
///
static Point GetUniformToFillPoint(Size parentSize, Size objSize, Point point)
{
Point transformedPoint = new Point();
double pw = parentSize.Width;
double ph = parentSize.Height;
double ow = objSize.Width;
double oh = objSize.Height;
if(ow/oh < pw/ph)
{
// 裁剪高度方向
double ohs = oh / ow * pw; // 填充后的高度
double ows = pw; //填充后的宽度
// 换算对应的点
transformedPoint.X = point.X * ows / ow;
transformedPoint.Y = (point.Y * ohs / oh) - (ohs - ph) / 2;
}
else
{
// 裁剪宽度方向
double ohs = ph; // 填充后的高度
double ows = ow / oh * pw; //填充后的宽度
// 换算对应的点
transformedPoint.Y = point.Y * ohs / oh;
transformedPoint.X = (point.X * ows / ow) - (ows - pw) / 2;
}
return transformedPoint;
}
