目前,我正在尝试使用NDK保存位图,而不是还原Java对象,而是直接使用C++像素数组。
我已经将位图存储在一个JniBitmapHolder中,我可以成功地获得存储的像素。我想尝试在不调用Bitmap.create方法的情况下保存它们。
目前,我正试图这样做(但没有成功):
Util.saveImageSync(Util.getOutputMediaFile("filtered"), jniBitmap.getBitmapArray());该方法的实现方式如下:
public static void saveImageSync(final File outputFile, final ByteBuffer buffer){
FileOutputStream out = null;
try {
out = new FileOutputStream(outputFile);
out.getChannel().write(buffer);
} catch (Exception e) {
Dbg.d("ERROR", e);
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}我将方法getBitmaArray添加到库中,如下所示:
JNIEXPORT jobject JNICALL Java_com_jni_bitmap_1operations_JniBitmapHolder_jniGetBitmapArray(
JNIEnv * env, jobject obj, jobject handle) {
JniBitmap *jniBitmap = (JniBitmap *) env->GetDirectBufferAddress(handle);
jniBitmap->_storedBitmapPixels;
return env->NewDirectByteBuffer(jniBitmap->_storedBitmapPixels, 0);}
但直接像素阵列似乎不够,也不正确。还有其他方法可以直接将像素保存到文件中,而不需要创建Java位图?
此外,提示/指针也很受欢迎。
发布于 2015-09-17 16:55:21
经过进一步研究后,最快的方法是保留一个支持位图,将其传递给C++,而不需要每次使用该函数就创建一个新位图,然后使用它直接使用Java方法来保存像素。
不过,感谢Alex给出的答案:)实际上,问题在于缺少的标题。
https://stackoverflow.com/questions/32571030
复制相似问题