Universal Image Loader从内存加载位图

时间:2015-03-13 01:23:54

标签: android bitmap universal-image-loader

Universal Image Loader提供了许多加载图像的方法。

"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

但所有这些方式加载图像表单文件,我需要一种从内存加载的方法,因为我的图像已加密并存储在资源文件夹中,当我显示此图像时,我需要以下步骤。

  1. 将图像解密为字节数组。
  2. 从字节创建位图。
  3. 加载/显示图像。
  4. 所以它就是这样的。这可能吗?

    Bitmap bitmap = decrypt(encryptedImageFile);
    imageLoader.displayImage(bitmap, imageView);
    

    目前,我正在考虑将位图保存到文件并加载文件,但这需要更多时间。

3 个答案:

答案 0 :(得分:0)

我相信如果您的图像存储在资源目录中的图像文件夹中,那么您正在寻找以下内容,然后您就可以获得图像列表

  private List<String> getImage(Context conetx) throws IOException { 
      AssetManager assetManager =conetx.getAssets();
      String[] files = assetManager.list("image");   
      List<String> it=Arrays.asList(files);
      return it; 
  } 

作为注释,不是使用资产目录,而是将文件放入/ res / raw,然后您可以使用以下URI访问它

android.resource://com.your.packagename/" + R.raw.<nameoffile>

答案 1 :(得分:0)

我想你需要了解这一点。您必须知道,如果您已阅读universal-image-loader的源代码,则在提供图像网址后将图像加载到ImageView的顺序为:内存,SD卡(如果已设置),互联网。这意味着在您致电ImageLoader.display(url, imageview);后,它会从Bitmap 第一个中查找memory,如果它不存在,则会查找该文件然后,如果文件存在,则将文件转换为SDCard,然后将Bitmap加载到Bitmap并将其存储在内存中。ImageView中的图像但是如果文件不存在,它将下载url的图像文件,然后将文件存储到SDCard并将文件转换为Bitmap并加载{{} 1}}进入记忆。 最重要的是,如果您对上面发布的内容感到困惑,我建议您阅读它的源代码。

因此,您无需从内存加载BitmapBitmap将为您执行此操作。

答案 2 :(得分:0)

让我们选择自己的方案,这样我们的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);
        }
    }
}


DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .build();


ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
        .defaultDisplayImageOptions(defaultOptions)
        .imageDownloader(new StreamImageDownloader(getApplicationContext()))
        .build();

ImageLoader.getInstance().init(config);



    ByteArrayInputStream stream = new ByteArrayInputStream(imgBytes);
    String imageId = "stream://" + stream.hashCode();
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .extraForDownloader(stream)
            .build();
    ImageLoader.getInstance().displayImage(imageId, imageView, options);