在编写界面程序和处理图片时,时常遇到要等比缩放到某个指定范围,一般根据长宽比的判断进行处理;
例如:在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; }