ネイティブ C コードから呼び出される Java メソッドがあります。仕事は簡単で、ビットマップをコピーします。しかし、それはエラーなしで爆撃します。
public synchronized Bitmap copyScreen() {
try {
Log.d(TAG, "before copy Screen");
//Any of these lines make it bomb out.
// Bitmap copy = bmp.copy(bmp.getConfig(), false);
//Bitmap copy = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(),
// bmp.getConfig());
Bitmap copy = Bitmap.createBitmap(800, 480, Config.ARGB_8888);
Log.d(TAG, "after copy Screen");
return copy;
} catch (Exception ex) {
Log.e(TAG, "copyScreen", ex);
return null;
}
}
copyScreen
問題なくJavaからこれを呼び出すことができます。爆撃するのは JNI から呼び出されたときだけです。
どちらの行もコピーしなくても、問題なく動作します。
ログ猫はちょうど示しています:
11-15 20:10:49.234: D/GraphicsBuffer(24341): コピー前画面
ネイティブ コードは、メインとは別のスレッドで実行されていることに注意してください。bmp
フィールドへのすべてのアクセスを同期しました。しかし、何もせずに新しいビットマップを作成しても、終了します。ビットマップが小さければ問題ありません。
Bitmap copy = Bitmap.createBitmap(80, 48, Config.ARGB_8888);
動作しますが、JNI から割り当てることができるものに制限はありますか?