BitmapFactory.decodeFileDescriptor使用有效的文件描述符返回null

时间:2011-09-29 22:34:57

标签: android

我遇到了BitmapFactory.decodeFileDescriptor返回空位图的问题。 提供的文件描述符来自:

AssetManager.openFd("test.png").getFileDescriptor();

路径正确,文件存在,没有抛出异常,FileDescriptor.Valid()返回true。

我看过的其他代码示例似乎没有这个问题。

这让我很难过,我不知道该如何从这里开始。 有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。首先,我将FileInputStream.getFD和BitmapFactory.decodeFileDescriptor放在不同的线程中,它返回null。

PhotoDecodeTask task = new PhotoDecodeTask();
task.execute(new FileInputStream(filePath).getFD());

private class PhotoDecodeTask extends AsyncTask<FileDescriptor,Integer,Bitmap>{

    @Override
    protected Bitmap doInBackground(FileDescriptor... params) {
        ...
        return BitmapFactory.decodeFileDescriptor(params[0],null, opts);
    }
}

我试着把它们放在同一个帖子里,我的作品。但我不知道为什么。

PhotoDecodeTask task = new PhotoDecodeTask();
task.execute(filePath);

private class PhotoDecodeTask extends AsyncTask<String,Integer,Bitmap>{

    @Override
    protected Bitmap doInBackground(String... params) {
        ...
        FileDescriptor fd = new FileInputStream(params[0]);
        return BitmapFactory.decodeFileDescriptor(fd,null, opts);
    }
}

答案 1 :(得分:1)

我遇到了同样的问题。我必须按如下方式更改我的代码:

InputStream imgFile = context.getAssets().open(imagePath);
BitmapFactory.decodeStream(imgFile);

所以我没有使用BitmapFactory.decodeFileDescriptor,而是使用了decodeStream。