摄像头获取图片旋转90度 全部花屏或者对角一半花屏解决

问题

由摄像头直接获取到的数据是逆时针旋转90度的,这是因为Android手机的摄像头是横着放的,因此获取数据是逆时针旋转了90度。那么如果想获取到正的图像需要顺时针旋转90度。摄像头获取到YUV数据该怎样顺时针旋转90度?做旋转的时候碰到花屏或者对角花屏一半又是什么原因造成的?

解决问题

  1. 手机摄像头获取YUV数据,该怎样顺时针旋转90度?
    手机摄像头获取到的YUV数据是NV21。可以简化成一个 长宽4*6的小图片,总像素是6*4*3/2=36

在这里插入图片描述

顺时针旋转90度之后,YUV数据就变成:

在这里插入图片描述

长宽由原来的46变成64.
NV21数据旋转90度代码如下:`

//旋转后的数据储存在buffer数组中,并且长宽的数值变成宽长
private void portraitData2Raw(byte[] data) {
int width = size.width;
int height =size.height;

    int y_len = width * height;
    int uvHeight = height/2;

    int k = 0;

    for (int j = 0; j < width; j++) {
        for (int i = height - 1; i >= 0; i--) {
            buffer[k++] = data[width * i + j];
        }
    }


    for (int j = 0; j < width; j+=2) {
        for (int i = uvHeight - 1; i >= 0; i--) {
            buffer[k++] = data[y_len + width * i + j];
            buffer[k++] = data[y_len + width * i + j + 1];
        }
    }

}

  1. 根据获取到的旋转之后的数据以JPEG的方式保存位相片
     如果宽长没有互调,那么就会出现花屏

3.如果在摄像头回调获取数据的时候,直接使用回调的数据会产生对角花屏。因为回调会修改这个数据,旋转也在修改这个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猫 猫小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值