Android 您的NV21到RGB不工作?
我正着手开发一个应用程序,它可以监控相机预览,并对其进行一些图像处理,在画布上显示int。作为诊断,我有以下代码:Android 您的NV21到RGB不工作?,android,camera,Android,Camera,我正着手开发一个应用程序,它可以监控相机预览,并对其进行一些图像处理,在画布上显示int。作为诊断,我有以下代码: camera = Camera.open(); ImageFormat imf = new ImageFormat(); Camera.Parameters param = camera.getParameters(); param.setPreviewSize(128, 128); preview_format = param.getPreviewFormat(); Camer
camera = Camera.open();
ImageFormat imf = new ImageFormat();
Camera.Parameters param = camera.getParameters();
param.setPreviewSize(128, 128);
preview_format = param.getPreviewFormat();
Camera.Size sz = param.getPreviewSize();
myimage = new int[sz.width*sz.height];
在运行时,它报告preview_格式为17,我理解为“NV21”
后来我有:
camera.setPreviewCallback(new PreviewCallback()
{
public void onPreviewFrame(byte[] _data, Camera _camera)
{
YUV_NV21_TO_RGB(myimage , _data, 128, 128) ;
}
});
函数YUV_NV21_TO_RGB取自
同时,在另一个线程中,我有:
canvas.drawBitmap(
myimage, // the int array
0, // where to start in the array
128, // the stride ???
200, // x coord of where to display
200, // y coord of where to display
128, // wid
128, // ht
false, // alpha used?
null); // the paint used
在下面的方框中可以看到结果图像和其他诊断。当我移动手机时,条纹会发生变化,在某种程度上似乎与相机所指向的东西相对应,但很明显它已经被弄坏了。我尝试使用另一个找到的函数和另一个来自维基百科的函数,但结果似乎相同。有什么想法吗
编辑:我的一个想法是,可能NV21没有完全指定格式-可能是一类格式,您需要继续指定每像素位或类似的位
编辑:额外提示-如果我完全覆盖相机,正方形将完全变成纯绿色
您的预览大小不是128乘128,因为您没有设置它。您可以在
摄影机.Parameters
实例上设置它,但不将其应用于摄影机
您需要添加以下行:
camera.setParameters(param);
直接从摄像机
实例获取参数可能是安全的:
preview_format = camera.getPreviewFormat();
Camera.Size sz = camera.getPreviewSize();
您确定接收的数据是针对128像素宽的NV21编码图像的吗?这两个参数(宽度、格式)中的任何一个都不正确。onPreviewFrame()是否使用24576字节的字节数组调用?\根据eclipse调试器,数据的长度似乎为460800字节。是的,确实如此。你的预览大小是640x480像素。答对了!我很尴尬:-)