Android 7のAssetディレクトリからビットマップをデコードするにはどうすればよいですか?Android 7のBitmapFactory.decodeStreamがAndroid 7でnullを返す
私のアプリケーションは、マシュマロまでのAndroidバージョンでうまく動作しています。 Android 7では、Assetディレクトリから画像を読み込むことができません。その結果、
private Bitmap getImage(String imagename) {
// Log.dd(logger, "AsyncImageLoader: " + ORDNER_IMAGES + imagename);
AssetManager asset = context.getAssets();
InputStream is = null;
try {
is = asset.open(ORDNER_IMAGES + imagename);
} catch (IOException e) {
// Log.de(logger, "image konnte nicht gelesen werden: " + ORDNER_IMAGES + imagename);
return null;
}
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, PW, PH);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
// Lesen des Bitmaps in der optimierten Groesse
return BitmapFactory.decodeStream(is, null, options);
}
(のみアンドロイド7)BitmapFactory.decodeStream
がnull:
マイコード。それは古いAndroid APIを正しく動作させます。
を返しました:50.384 6274から6610/myappというのD/skia私は次のメッセージを参照してくださいデバッグモードで09-04:10:10:--- SkAndroidCodec :: NewFromStreamがnull
誰かが私に理由とコーディングを修正する方法を教えてもらえますか?
編集:一方で、inJustDecodeBounds = trueで最初のBitmapFactory.decodeStreamを削除すると、後でinJustDecodeBounds = falseで正常なBitmapFactory.decodeStreamが作成されます。その理由を知らず、ビットマップサイズの測定方法をどのように置き換えるかを知らない。
私の推測によれば、あなたの問題はあなたの資産に特有です。 Android 7.0を実行しているNexus 9で、アセットから画像を読み込む[自分のブックサンプルの1つ(https://github.com/commonsguy/cw-omnibus/tree/master/Bitmaps/InSampleSize)]をテストしました。それはうまくいくようです。 – CommonsWare