如何在android中使用JNI将字节数组数据写入.jpg文件
我想在android中使用JNI将数据的字节数组存储到.jpg文件中。 我使用下面的代码,它将存储字节数组数据,但.jpg文件未打开,或者在phone gallery中打开文件时显示错误 这里是bmpArray:字节数组 文件路径:SD卡目录+文件名如何在android中使用JNI将字节数组数据写入.jpg文件,android,file,java-native-interface,Android,File,Java Native Interface,我想在android中使用JNI将数据的字节数组存储到.jpg文件中。 我使用下面的代码,它将存储字节数组数据,但.jpg文件未打开,或者在phone gallery中打开文件时显示错误 这里是bmpArray:字节数组 文件路径:SD卡目录+文件名 void Java_com_appsforbb_businesscardreader_ImageUtility_setNativeBitmapArray(JNIEnv* env, jclass object,jbyteArray bmpArray,
void Java_com_appsforbb_businesscardreader_ImageUtility_setNativeBitmapArray(JNIEnv* env, jclass object,jbyteArray bmpArray,jstring filePath)
{
jbyte* bmp= env->GetByteArrayElements(bmpArray, 0);
jsize length = env->GetArrayLength(bmpArray);
jbyteArray arr = env->NewByteArray(length);
const char* path = env->GetStringUTFChars(filePath, 0);
FILE* file = fopen( path, "w+" );
fwrite(bmpArray, 1, length, file );
fflush(file);
fclose(file);
LOGI("Byte array stored..");
}
是的,我找到了答案
将参数bmpArray替换为bmp
i、 e
忘记JNI,用Java实现:
OutputStream out = new FileOutputStream(filePath);
out.write(bmpArray);
out.close();
如果它的运行速度不超过您发布的更正版本,我会感到惊讶。为什么?您可以直接从Java执行此操作。你为什么认为你需要JNI?@EJP它快一点,真的。真的吗?你有证据证明这一说法吗?还是你只是在猜测?您需要跨越一个JNI边界,并且在您发布的代码中至少有三次回调Java。你知道这些操作的成本吗?当你无法让它工作时,你怎么可能测试过它,并且不得不在这里问一个关于如何操作的问题?@challa你能将bytearray转换为位图而不是保存并返回位图吗?问题是:“如何使用JNI将字节数组数据写入android中的.jpg文件”。请保留您的建议…当然。别忘了让我们知道,证明所有额外成本和复杂性的方法要快得多。天哪……如果我有所有努力工作的C代码(转换、修改,…),将结果写入此C文件将更快。@user25562您的问题中没有提到这些,或者当我问您为什么要使用JNI时,在我发布这个答案之前的几个小时。此答案中的代码与您发布的代码完全相同,只是它有效。我回答了你问的问题。3.5年后,仍在等待通过JNI了解它的速度有多快。
OutputStream out = new FileOutputStream(filePath);
out.write(bmpArray);
out.close();