图像旋转平移偏移量

本文关键字:偏移量 旋转 图像 | 更新日期: 2023-09-27 18:04:12

我构建了一个系统,该系统使用对象的最左边和最垂直的中心点作为原点来旋转和缩放对象。转换后,您可以将对象的html/css3信息发送到服务器,c#将尝试重新绘制您创建的场景。c#以相同的程度旋转对象/图像,但从垂直和水平中心点旋转它们,这会导致对象/图像改变尺寸。我已经计算出了这些变化但是物体左上角的x坐标和y坐标发生了偏移/images

这是我一直试图找出处理偏移的方法:

        int[] rotResult = new int[2];
        int[] tLCoord = new int[2];
        int[] tRCoord = new int[2];
        int[] bLCoord = new int[2];
        int[] bRCoord = new int[2];
        int[] tLCoordTmp = new int[2];
        int[] tRCoordTmp = new int[2];
        int[] bLCoordTmp = new int[2];
        int[] bRCoordTmp = new int[2];
        float sin = (float)Math.Sin(angle * Math.PI / 180.0);
        float cos = (float)Math.Cos(angle * Math.PI / 180.0);
        tLCoord[0] = (originalX - Math.Abs(xMin));
        tLCoord[1] = (originalY - Math.Abs(yMin));
        tRCoord[0] = origwidth;
        tRCoord[1] = 0;
        bLCoord[0] = 0;
        bLCoord[1] = (origheight * -1);
        bRCoord[0] = origwidth;
        bRCoord[1] = (origheight * -1);
        tLCoordTmp[0] = Convert.ToInt32((tLCoord[0] * cos) - (tLCoord[1] * sin));
        tLCoordTmp[1] = Convert.ToInt32((tLCoord[1] * cos) + (tLCoord[0] * sin));
        tRCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + tRCoord[0]) * cos) - (tRCoord[1] * sin));
        tRCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + tRCoord[1]) * cos) + (tRCoord[0] * sin));
        bLCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + bLCoord[0]) * cos) - (bLCoord[1] * sin));
        bLCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + bLCoord[1]) * cos) + (bLCoord[0] * sin));
        bRCoordTmp[0] = Convert.ToInt32(((tLCoordTmp[0] + bRCoord[0]) * cos) - (bRCoord[1] * sin));
        bRCoordTmp[1] = Convert.ToInt32(((tLCoordTmp[1] + bRCoord[1]) * cos) + (bRCoord[0] * sin));
        if (angle >= 270)
        {
            rotResult[0] = tLCoordTmp[0];
            rotResult[1] = tRCoordTmp[1];
        }
        else if (angle <= 90)
        {
            rotResult[0] = bLCoordTmp[0];
            rotResult[1] = tLCoordTmp[1];
        }
        else if (angle > 90 && angle <= 180)
        {
            rotResult[0] = bRCoordTmp[0];
            rotResult[1] = bLCoordTmp[1];
        }
        else if (angle > 180 && angle < 270)
        {
            rotResult[0] = tRCoordTmp[0];
            rotResult[1] = bRCoordTmp[1];
        }
        return rotResult;

立即我知道有一些问题处理的方式,这个公式工作出在坐标平面和方式,c#和html/css都渲染视觉元素,我一直在运行小实验来抵消这些,似乎没有得到任何更接近的解决方案,有什么想法吗?

图像旋转平移偏移量

答案是首先从对象的左上角计算图像的X,Y偏移量,同时在c#中通过TranslateTransform和RotateTransform来旋转图像以防止剪切,然后使用对象的最左边中心点独立计算对象的适当X,Y坐标,之后只需要做一些条件语句来处理基于象限的计算差异