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

Reply via email to