2013-03-11 48 views
1

我有一個本地方法調用Java函數來創建位圖,然後以int數組的形式返回位圖數據。將本地int []轉換爲jintarray

該方法效率不高,因爲我需要創建一個位圖,然後是IntBuffer來複制位圖數據,然後本地方法創建一個新的int數組來存儲數據。 IntBuffer然後被回收(Bitmap對象可以被重用),並且當我創建超過10個位圖時,垃圾回收器開始減慢應用程序。

我可以在JNI中創建int數組,將它包裝到一個jintarray中並直接在Java中使用它?

+0

'int []'被映射到JNI中的'jintArray',沒有什麼特別的,我們需要做的。 – 2013-03-11 13:23:51

+0

是且不,Java int []是JNI中的jintArray,但是本地(C++)int []不是。 – 2013-03-11 13:29:16

+1

啊,你應該清楚地說你正在談論一個C++'int []'。我們可以通過調用'GetIntArrayElements()'從'jintArray'獲得一個。但是,如果你想以相反的方式,'NewDirectByteBuffer()'確實是你正在尋找的東西。 – 2013-03-11 13:31:34

回答

0

找到了解決方案。

我可以使用JNI函數NewDirectByteBuffer將本地int *(或char *)包裝到ByteBuffer中。然後用它作爲參數,而不是jintarray。