Java не имеют беззнаковых целых типов, но камера не очень волнует. Вы можете безопасно отобразить массив байтов, который поступает с onPictureTaken()
обратным вызовом на uint8_t*
.
Sidenote: Скорее всего, изображение поступит как поток JPEG.
Обновление: Пример реализации onPictureTaken()
в C.
Вот что у вас есть где-то в вашей деятельности:
mCamera = Camera.open();
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
...
mCamera.takePicture(null, null, new android.hardware.Camera.NativePictureCallback);
Вот файл SRC/Android/оборудование/Camera/NativePictureCallback.java:
package android.hardware.Camera;
class NativePictureCallback: implements PictureCallback {
static {
System.loadLibrary("NativeCamera");
}
public void native onPictureTaken(byte[] data, Camera camera);
}
И вот C, который является частью libNativeCamera.so:
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);
}
Почему вы так хотите, вы пытаетесь преобразовать байт [] в unsigned char array, его диапазон находится в пределах 0-255 –
@Arju I (есть), чтобы преобразовать его, потому что большую часть времени мы не можем просто использовать данные Java типы непосредственно в C. Например, мы должны преобразовать java.lang.String в char *, прежде чем мы сможем эффективно использовать его в C. Я что-то пропустил? – user3020258