I believe I'm seeing weirdness in the behavior
of BitmapFactory.decodeFileDescriptor. tl;dr: I can get a bitmap from a
stream, but not from a related fd.
There are four snippets of code, below. The first two succeed, the second
two fail.
The respective error messages for the 3rd and 4th snippets are:
11-20 15:43:29.656: D/skia(2960): --- SkImageDecoder::Factory returned null
11-20 15:41:38.876: D/skia(2868): --- decoder->decode returned false
FWIW, I have evidence that I can make the 4th snippet will work if I simply
including the following code -- which also produces a valid bitmap --
somewhere nearby:
BitmapFactory.decodeFileDescriptor(ParcelFileDescriptor.open(*new*File(getFilesDir(),
"logo.png"), ParcelFileDescriptor.MODE_READ_ONLY).getFileDescriptor());
Anyone else seen anything like this? I discovered the it while trying to
build a content provider that returns a ParcelFileDescriptor for an asset,
if it exists, or an external file, if not.
-blake
// asset stream: works fine
try {
bm = BitmapFactory.decodeStream(
getAssets().open("logo.png"));
}
catch (Exception e) { Log.e(TAG, "failed opening asset stream", e); }
((ImageView) findViewById(R.id.image_1)).setImageDrawable(new
BitmapDrawable(rez, bm));
// external file stream: works fine
try {
bm = BitmapFactory.decodeStream(
new FileInputStream(new File(getFilesDir(), "logo.png")));
}
catch (Exception e) { Log.e(TAG, "failed opening file stream", e); }
((ImageView) findViewById(R.id.image_2)).setImageDrawable(new
BitmapDrawable(rez, bm));
// assets file descriptor: fails
try {
bm = BitmapFactory.decodeFileDescriptor(
getAssets().openFd("logo.png").getFileDescriptor());
}
catch (Exception e) { Log.e(TAG, "failed opening asset file desc", e); }
((ImageView) findViewById(R.id.image_3)).setImageDrawable(new
BitmapDrawable(rez, bm));
// assets file descriptor: fails
try {
bm = BitmapFactory.decodeFileDescriptor(
new FileInputStream(new File(getFilesDir(), "logo.png")).getFD());
}
catch (Exception e) { Log.e(TAG, "failed opening file desc", e); }
((ImageView) findViewById(R.id.image_4)).setImageDrawable(new
BitmapDrawable(rez, bm));
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en