我目前正在使用Javacv,它利用public void onPreviewFrame(byte[] data, Camera camera)相机功能.
由于相机已被弃用,我一直在研究camera2和MediaProjection.这两个库都使用ImageReader类.
目前我ImageReader使用以下代码实例化这样的:
ImageReader.newInstance(DISPLAY_WIDTH, DISPLAY_HEIGHT, PixelFormat.RGBA_8888, 2);
并附上OnImageAvailableListener这样的:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
mBackgroundHandler.post(new processImage(reader.acquireNextImage()));
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用RGBA_8888Javacv 的格式按照这个帖子:https://github.com/bytedeco/javacv/issues/298但这对我不起作用.
所以我正在考虑使用Render脚本将这些Image转换为NV21(YUV_420_SP)格式(这是onPreviewFrame函数中相机的默认输出),因为这对我来说对camera库有用.
我还阅读了这个和本网站的帖子进行转换,但这些对我不起作用,我担心它们会太慢.此外,我对C的了解非常有限.基本上看起来我想要https://developer.android.com/reference/android/renderscript/ScriptIntrinsicYuvToRGB.html的反向操作
那么你怎么能从一个Image匹配onPreviewFrame函数输出的字节数组,即NV21(YUV_420_SP)格式?最好使用Renderscript,因为它更快.
我尝试过使用ImageFormat.YUV_420_888 …
camera android image-processing renderscript android-camera2