gpt4 book ai didi

android - YUV_NV21_TO_RGB 不工作?

转载 作者:行者123 更新时间:2023-11-30 03:08:27 25 4
gpt4 key购买 nike

我正着手开发一个应用程序来监视相机预览,对其进行一些图像处理并在 Canvas 上显示 int。就像诊断一样,我有以下代码:

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_format 是 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 取自 here .

同时在另一个线程中我有:

    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

生成的图像可以在下面的方 block 中的其他诊断中看到。当我四处移动手机时,条纹会发生变化,并且在某种程度上似乎与相机所指向的方向相对应,但显然它已经被破坏了。我尝试使用找到的替代函数 here , 和维基百科的另一个,但结果看似相同。有什么想法吗?

编辑:我的一个想法是 NV21 可能没有完全指定格式 - 也许它是一类格式,您需要继续指定每像素位数或类似格式。

编辑: 一条额外的线索 - 如果我完全遮住相机,正方形就会变成纯绿色。

Output

最佳答案

您的预览尺寸不是 128 x 128,因为您设置失败。您在 Camera.Parameters 实例上设置了它,但没有将它应用到相机。

您需要添加以下行:

camera.setParameters(param);

而且直接从 Camera 实例获取参数可能是安全的:

preview_format = camera.getPreviewFormat();
Camera.Size sz = camera.getPreviewSize();

关于android - YUV_NV21_TO_RGB 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com