安卓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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值