Android通用图像加载器:从输入流中获取URI

5

我想询问一下关于从InputStream输入的URI的UIL库。因为我的图片源来自ZIP文件,所以我必须先解压缩它才能显示该图片。由于该图片太大,因此我必须使用UIL库,有人知道如何从InputStream中插入UIL吗?


传递图像的绝对路径以显示它。 - Sharjeel
2个回答

6

我认为您可以类似于从数据库加载图像的方式来完成- Universal image loader for android是否能够使用来自sqlite db的图像?

让我们选择自己的方案,这样我们的URI看起来像"stream://..."

然后实现ImageDownloader。我们应该捕获带有我们方案的URI并返回图像流。

public class StreamImageDownloader extends BaseImageDownloader {

    private static final String SCHEME_STREAM = "stream";
    private static final String STREAM_URI_PREFIX = SCHEME_STREAM + "://";

    public StreamImageDownloader(Context context) {
        super(context);
    }

    @Override
    protected InputStream getStreamFromOtherSource(String imageUri, Object extra) throws IOException {
        if (imageUri.startsWith(STREAM_URI_PREFIX)) {
            return (InputStream) extra;
        } else {
            return super.getStreamFromOtherSource(imageUri, extra);
        }
    }
}

然后我们将这个“ImageDownloader”设置到配置中:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    ...
    .imageDownloader(new StreamImageDownloader(context))
    .build();

ImageLoader.getInstance().init(config); 这行代码用于初始化ImageLoader。然后我们可以通过以下方式从数据库中显示图像:
ImageStream is = ...; // You have image stream
// You should generate some unique string ID for this stream
// Streams for the same images should have the same string ID
String imageId = "stream://" + is.hashCode();

DisplayImageOptions options = new DisplayImageOptions.Builder()
    ...
    .extraForDownloader(is)
    .build();

imageLoader.displayImage(imageId, imageView, options);

嗨@NOSTRA,我实现了你的答案,但遇到了这个问题(http://stackoverflow.com/questions/39654279/java-inputsream-hascode-is-different-each-time-even-when-the-request-is-same)。你有什么想法吗? - Sudhir

1

可接受的路径

String imageUri = "http://someurl.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

然后显示图片
imageLoader.displayImage(imageUri, imageView);

来自文档:https://github.com/nostra13/Android-Universal-Image-Loader


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接