0

ビットマップのカラー配列をJNIレイヤーに渡し、getIntArrayResionメソッドを呼び出そうとすると、「ビットマップサイズがVMバジェットを超えています」というエラーが発生します。誰かがこの問題に対処する方法を知っていますか?

JNIEXPORT jint JNICALL Java_com_example_happy_MainActivity_Parsing( JNIEnv* env,
    jintArray bmapColorArray)
{
    int length = env->GetArrayLength(bmapColorArray);
    int * buffer;
    buffer = new int[length];
    env->GetIntArrayRegion(bmapColorArray,0,length, buffer);

    return 0;
}

ちなみに、バッファにコピーする代わりに、bmapColorArrayを直接使用できますか?なぜコピーする必要があるのか​​わかりません。本当に時間とスペースがかかります。私はAndroid開発チュートリアルに従ってそれを行いました。

4

2 に答える 2

0

ビットマップをJNiに渡す前に、サイズを変更してから渡します実際には、ヒープサイズが定義制限を超えているため、VMの予算が不足し、メモリが不足します。ビットマップのサイズを変更するエラーコーダースニペットがフォローしています

 /** getResizedBitmap method is used to Resized the Image according to custom width and height 
      * @param image
      * @param newHeight (new desired height)
      * @param newWidth (new desired Width)
      * @return image (new resized image)
      * */
    public static Bitmap getResizedBitmap(Bitmap image, int newHeight, int newWidth) {
        int width = image.getWidth();
        int height = image.getHeight();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // create a matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);
        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(image, 0, 0, width, height,
                matrix, false);
        return resizedBitmap;
    }
于 2013-01-24T06:42:46.100 に答える
0

アプリのメモリが不足しています。使用量を減らす必要があります。大量のビットマップを使用している場合は、使い終わったら必ずそれらをリサイクルしてください。ガベージ コレクターの実行とクリーンアップに非常に長い時間がかかることがあります。

于 2013-01-24T06:39:10.703 に答える