Skip to content Skip to sidebar Skip to footer

Universal Image Loader Get Original Image Size

I am using the Android-Universal-Image-Loader library to loading/caching remote images, and have been digging through the source for quite a while trying to find a way to retrieve

Solution 1:

There is no way to pass original image size from ImageDecoder to listener through params.

I think the solution for you is following. Extend BaseImageDecoder and create map in it for keeping image sizes:

Map<String, ImageSize> urlToSizeMap = new ConcurrentHashMap<String, ImageSize>();

Then override defineImageSizeAndRotation(...):

protected ImageFileInfo defineImageSizeAndRotation(InputStream imageStream, String imageUri)throws IOException {
    ImageFileInfoinfo=super.defineImageSizeAndRotation(imageStream, imageUri);
    urlToSizeMap.put(imageUri, info.imageSize); // Remember original image size for image URIreturn info;
}

Note: info.imageSize won't compile because imageSize isn't visible. I'll fix it in next version (1.8.5) but you can use reflection for now.

Set this decoder into configuration and keep reference to this decoder anywhere (or you can make urlToSizeMap static to access from listener).

Then in your listener:

@OverridepublicvoidonLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        selectableImageView.setImageBitmap(loadedImage);

        ImageSize imageSize = decoder.urlToSizeMap.get(imageUri);
        selectableImageView.setOriginalImageSize(imageSize.getWidth(), imageSize.getHeight());
        selectableImageView.invalidate();
}

Solution 2:

It seems that you do not have to implement own ImageLoadingListener if you want to get original size of loaded image. I use loadImage method and it seems recieved bitmap has origin sizes. UIL v1.8.6

  loader.loadImage(pin_url, option, newSimpleImageLoadingListener() {
        @OverridepublicvoidonLoadingFailed(String imageUri, View view,
                                    FailReason failReason) {
            showErrorLayout();
        }

        @OverridepublicvoidonLoadingComplete(String imageUri, View view,
                                      Bitmap loadedImage) {

             // width - device width// height - OpenGl maxTextureSizeif (width < loadedImage.getWidth() || height < loadedImage.getHeight()) {
                // handle scaling
            }

            iv.setImageBitmap(loadedImage);


        }
    });

Post a Comment for "Universal Image Loader Get Original Image Size"