android - 如何将 Android 中的 byte[] 转换为 C 中的 uint8_T 数组?

标签 android c java-native-interface bytearray

我打算用照相手机 (Android) 拍照,然后通过 JNI 将其传递给 C 函数。 C 函数由 MATLAB Coder 生成。

这里是生成的 C 函数的头文件:

real_T detection(const **uint8_T** OriginalImage[28755648])

这是图像的数据类型:

 @Override
    public void onPictureTaken(**byte[] data**, Camera camera) {.....}

问题:如何将byte[]转为uint8_T数组? 我找到了 how to convert byte[] to jbyte * ..但我不知道如何处理 uint8_T?

我只会Java,不会C。

问候,

最佳答案

Java 没有无符号整数类型,但相机并不关心。您可以安全地将来自 onPictureTaken() 回调的字节数组转换为 uint8_t*

旁注:最有可能的是,图片将以 JPEG 流的形式到达。

更新:在 C 中实现 onPictureTaken() 的示例。

这是您在 Activity 中某处的内容:

mCamera = Camera.open();
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
...
mCamera.takePicture(null, null, new android.hardware.Camera.NativePictureCallback);

这是文件src/android/hardware/Camera/NativePictureCallback.java:

package android.hardware.Camera;
class NativePictureCallback: implements PictureCallback {
  static { 
    System.loadLibrary("NativeCamera"); 
  } 
  public void native onPictureTaken(byte[] data, Camera camera);
}

这是 libNativeCamera.so 的一部分的 C 文件:

include <jni.h>
include <tmwtypes.h>

real_T detection(const uint8_T* OriginalImage);

JNIEXPORT void JNICALL
Java_android_hardware_Camera_NativePictureCallback_onPictureTaken(
    JNIEnv* env, jobject thiz, jbytearray data, jobject camera) {
  jbyte* dataPtr = (*env)->GetByteArrayElements(env, data, NULL);
  real_T res = detection((const uint8_T*)dataPtr);
  (*env)->ReleaseByteArrayElements(env, data, dataPtr, JNI_ABORT);
}

关于android - 如何将 Android 中的 byte[] 转换为 C 中的 uint8_T 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20137311/

相关文章:

java - 如何将 Parcelable ArrayList 从 Fragment 传递到 Fragment?

android - 删除 fragment 中的溢出菜单 3 个点

c - 生成没有良好随机源的初始化 vector

使用 strcat 和 realloc 的串联产生意外错误

object - JNI : How can i check if jobject is a null object in native c code

android - 使用 Wifi 直连的点对点 android 和 iOS(多点连接?)

java - 来自深层链接的空查询参数

c - 使用 ar 命令时,未创建库

java - java 中的 opencv 使用 MAT 而不是 vector 作为标签

java - 未在此范围内声明 GetByteArrayElements