安卓ui坐标和底层内存图坐标的转换关系

这里写图片描述

这里写图片描述

// 手机上ui坐标转换为内存坐标的转换
/*
@para inCoord 输入ui坐标
@para outCoord 输出对应在内存的坐标
@para orcation 手机角度 090180270
@para camId 后置相机为0,前置为1
@para inW 输入坐标系的宽
@para inH 输入坐标系的高
@para outWH 输出宽高

*/
int UiCoord2MemCoord(int inCoord[2], int outCoord[2], int orcation, int camId, int inW, int inH, int outWH[2])
{
    int outW = 0;
    int outH = 0;
    if (orcation == 90 || orcation == 270)
    {
        outW = inW;
        outH = inH;
    }
    else
    {
        outW = inH;
        outH = inW;
    }
    outWH[0] = outW;
    outWH[1] = outH;

    if (0 == camId)
    {
        if (0 == orcation)
        {
            outCoord[0] = inCoord[1];
            outCoord[1] = outH - 1 - inCoord[0];
        }
        else if (90 == orcation)
        {
            outCoord[0] = inCoord[0];
            outCoord[1] = inCoord[1];
        }
        else if (270 == orcation)
        {
            outCoord[0] = outW - 1 - inCoord[0];
            outCoord[1] = outH - 1 - inCoord[1];
        }
        else if (180 == orcation)
        {
            outCoord[0] = outW - 1 - inCoord[1];
            outCoord[1] = inCoord[0];
        }
    }
    else if (1 == camId) // 前置摄像头
    {
        if (0 == orcation)
        {
            outCoord[0] = outW - 1 - inCoord[1];
            outCoord[1] = outH - 1 - inCoord[0];
        }
        else if (90 == orcation)
        {
            outCoord[0] = outW - 1 - inCoord[0];
            outCoord[1] = inCoord[1];

        }
        else if (270 == orcation)
        {
            outCoord[0] = inCoord[0];
            outCoord[1] = outH - 1 - inCoord[1];
        }
        else if (180 == orcation)
        {
            outCoord[0] = inCoord[1];
            outCoord[1] = inCoord[0];
        }

    }
    return 0;
}
// 手机上内存坐标的转换ui坐标转换为
/*
@para inCoord 输入内存坐标
@para outCoord 输出对应在ui的坐标
@para orcation 手机角度 090180270
@para camId 后置相机为0,前置为1
@para inW 输入坐标系的宽(内存图像)
@para inH 输入坐标系的高(内存图像)
@para outWH 输出宽高

*/
int MemCoord2UiCoord(int inCoord[2], int outCoord[2], int orcation, int camId, int inW, int inH, int outWH[2])
{
    int outW = 0;
    int outH = 0;
    if (orcation == 90 || orcation == 270)
    {
        outW = inW;
        outH = inH;
    }
    else
    {
        outW = inH;
        outH = inW;
    }
    outWH[0] = outW;
    outWH[1] = outH;

    if (0 == camId)
    {
        if (0 == orcation)
        {
            outCoord[0] = inH - 1 - inCoord[1];
            outCoord[1] = inCoord[0];
        }
        else if (90 == orcation)
        {
            outCoord[0] = inCoord[0];
            outCoord[1] = inCoord[1];
        }
        else if (270 == orcation)
        {
            outCoord[0] = inW - 1 - inCoord[0];
            outCoord[1] = inH - 1 - inCoord[1];
        }
        else if (180 == orcation)
        {
            outCoord[0] = inCoord[1];
            outCoord[1] = inW - 1 - inCoord[0];
        }

    }
    else if (1 == camId) // 前置摄像头
    {
        if (0 == orcation)
        {
            outCoord[0] = inH - 1 - inCoord[1];
            outCoord[1] = inW - 1 - inCoord[0];

        }
        else if (90 == orcation)
        {
            outCoord[0] = inW - 1 - inCoord[0];
            outCoord[1] = inCoord[1];

        }
        else if (270 == orcation)
        {
            outCoord[0] = inCoord[0];
            outCoord[1] = inH - 1 - inCoord[1];

        }
        else if (180 == orcation)
        {
            outCoord[0] = inCoord[1];
            outCoord[1] = inCoord[0];
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/baidu_31872269/article/details/77868682