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 pszize = parameters.getSupportedPreviewSizes();
		
        if (null != pszize && 0 < pszize.size()) {
                int height[] = new int[pszize.size()];// 声明一个数组
                Map map = new HashMap();
                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;
...............................
}
远端视频数据也就正确的画出来了。拖了几天的问题,╮(╯▽╰)╭。有哪位大神知道原因,请指导哈

你可能感兴趣的:(Camera)