我正在尝试使用 NDK 进行一些图像处理。我没有使用opencv。
我对 Android 还很陌生,所以我是分步进行的。我首先编写了一个简单的应用程序,它可以让我从相机捕获视频并将其显示到屏幕上。我已经完成了。
然后我尝试以原生方式操作相机数据。但是,onPreviewFrame 使用字节数组来捕获帧信息。这是我的代码 -
public void onPreviewFrame(byte[] arg0, Camera arg1)
{
if (imageFormat == ImageFormat.NV21)
{
if ( !bProcessing )
{
FrameData = arg0;
mHandler.post(callnative);
}
}
}
而callnative runnable就是这样——
private Runnable callnative = new Runnable()
{
public void run()
{
bProcessing = true;
String returnNative = callTorch(MainActivity.assetManager, PreviewSizeWidth, PreviewSizeHeight, FrameData, pixels);
bitmap.setPixels(pixels, 0, PreviewSizeWidth, 0, 0, PreviewSizeWidth, PreviewSizeHeight);
MycameraClass.setImageBitmap(bitmap);
bProcessing = false;
}
};
问题是,我需要在本机中使用 FrameData 作为浮点数据类型。但是,它是字节数组的形式。我想知道帧数据是如何存储的。这是一个二维字节数组吗?那么相机返回一个 8 位图像并将其存储为 640x480 字节?如果是这样,C 以什么形式解释这种字节数据类型?我可以简单地将其转换为浮点数吗?我有这个本地 -
jbyte *nativeData;
nativeData = (env)->GetByteArrayElements(NV21FrameData,NULL);
__android_log_print(ANDROID_LOG_INFO, "Nativeprint", "nativedata is: %d",(int)nativeData[0]);
但是,这会打印 -22,这让我相信我正在尝试打印出一个指针。我不确定为什么会这样。
我将不胜感激这方面的任何帮助。