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

等比缩放和填充.jpg

例如:在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;
}

[ 编辑 | 历史 ]
最近由“jilili”在“2016-10-08 00:16:42”修改