PreviewCallback中的data数据画图出现了花屏现象

Camera.PreviewCallback

public void onPreviewFrame(byte[] data, Camera camera)

之前由于Camera的preview format只支持:

PixelFormat.YCbCr_420_SP ---> instead ImageFormat.NV21这种图片格式(使用

int format = parameters.getPreviewFormat();
				Log.d(TAG, "preview format:"+format);
查看)

使得BitmapFactory.decodeByteArray一直解码不出图片,网上找了半天,后来终于找到了转码的方法,sdk2.2及以上的系统提供了转换接口,yuvimage类的compressToJpeg函数。

使用了它以后,前置摄像头preview的数据可以画在canvas上了,而且和surfaceView里预览的摄像头画面一致,但是把它换成了后置摄像头,canvas画图的花屏图片,出现了花屏现象一般就是使用了preview不支持的size,我跟踪代码,看了看代码:

List<Size> pszize = parameters.getSupportedPreviewSizes();
		
        if (null != pszize && 0 < pszize.size()) {
                int height[] = new int[pszize.size()];// 声明一个数组
                Map<Integer, Integer> map = new HashMap<Integer, Integer>();
                for (int i = 0; i < pszize.size(); i++) {
                	
                    Size size = (Size) pszize.get(i);
                    int sizeheight = size.height;
                    int sizewidth = size.width;
                    height[i] = sizeheight;
                    map.put(sizeheight, sizewidth);
//                    Log.d(TAG, "size.width:"+sizewidth+"\tsize.height:"+sizeheight);
                }
                Arrays.sort(height);
             // 设置
//                parameters.setPictureSize(map.get(height[0]),height[0]);
    			parameters.setPreviewSize(map.get(height[1]),height[1]);  
        }
我是使用摄像头支持的preview size啊,就这样找不出原因。

后来过了两天,我从网上闲逛,看了别人的代码,和这个无关,突发奇想:

@Override
			public void onPreviewFrame(byte[] data, Camera camera) {
				// TODO Auto-generated method stub
			    //在视频聊天中,这里传送本地frame数据给remote端
//				Log.d(TAG, "camera:"+camera);
				int width = camera.getParameters().getPreviewSize().width;
				int height = camera.getParameters().getPreviewSize().height;
...............................
}
远端视频数据也就正确的画出来了。拖了几天的问题,╮(╯▽╰)╭。有哪位大神知道原因,请指导哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值