0

bitmap.getPixels()から返されたピクセル データを渡すと、(何らかの画像処理を行う外部のネイティブ ライブラリで) クラッシュすることに気付きました。

アプリのdrawablesフォルダーに画像をパッケージ化し、ビットマップをロードすると

BitmapFactory.decodeResource()

次に、ピクセルデータを取得します

bitmap.getPixels()

クラッシュはなく、すべてが期待どおりに機能します。ただし、ファイルシステムから同じイメージをロードすると

BitmapFactory.decodeFile()

次に、ピクセルを取得します

bitmap.getPixels()

それを手渡すと、ネイティブライブラリがクラッシュします。

これら 2 つの呼び出しでイメージをビットマップに処理する方法に違いはありますか?

4

1 に答える 1

0

Android ソースの読み取り 興味深い違いが 1 つあります。decodeFile渡されたファイルがアセットの場合、メソッドは別のネイティブ ビットマップ デコーダを呼び出す可能性がありますが、decodeResourceは決してこれを行いません。

if (is instanceof AssetManager.AssetInputStream) {
            bm = nativeDecodeAsset(((AssetManager.AssetInputStream) is).getAssetInt(),
                    outPadding, opts);

ただし、クラッシュはネイティブ コードのバグである可能性が最も高いです。スタックフレームを不正なポインタやバッファ オーバーランで台無しにすると、通常、このような異常なクラッシュが発生します。クラッシュの前に実行されているすべてのネイティブ コードをチェックして、そのようなメモリの問題を見つけられるかどうかを確認してください。

于 2012-12-08T20:20:53.903 に答える