Universalimageloader 原图片大小获取
2024-09-07 11:41:32
Universalimageloader1.9.5上还没有对外提供获取图片的原大小功能,如果需要获取图片的源大小,可参考stackoverflow上的解决办法
stackoverflow地址
主要实现步骤如下:
1、自定义ImageDecoder
ImageDecoder不需要自己去实现,直接把项目自带的BaseImageDecoder上的代码拷出来即可。
2、定义map存放图片对应的原图大小信息
//存放源图片大小数据
protected static final Map<String, ImageSize> sizeMap = Collections.synchronizedMap(new HashMap<String, ImageSize>());
3、在decoder获取到图片大小以及图片信息后,将原图片大小信息保存起来。
public Bitmap decode(ImageDecodingInfo decodingInfo) throws IOException {
Bitmap decodedBitmap;
ImageFileInfo imageInfo;
InputStream imageStream = getImageStream(decodingInfo);
if (imageStream == null) {
L.e(ERROR_NO_IMAGE_STREAM, decodingInfo.getImageKey());
return null;
}
try {
imageInfo = defineImageSizeAndRotation(imageStream, decodingInfo);
//保存原图片大小信息
sizeMap.put(decodingInfo.getOriginalImageUri(), imageInfo.imageSize);
imageStream = resetStream(imageStream, decodingInfo);
Options decodingOptions = prepareDecodingOptions(imageInfo.imageSize, decodingInfo);
decodedBitmap = BitmapFactory.decodeStream(imageStream, null, decodingOptions);
} finally {
IoUtils.closeSilently(imageStream);
}
if (decodedBitmap == null) {
L.e(ERROR_CANT_DECODE_IMAGE, decodingInfo.getImageKey());
} else {
decodedBitmap = considerExactScaleAndOrientatiton(decodedBitmap, decodingInfo, imageInfo.exif.rotation,
orizontal);
}
return decodedtmap;
4、提供公开api给外部调用
public static ImageSize getOriginSize(String url) {
return sizeMap.get(url);
}
5、只需要在需要的地方获取原图大小就可以了,比如在图片显示前或图片加载完成后获取原大小进行操作
builder.preProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bitmap) {
ImageSize imageSize = BaseImageDecoder.getOriginSize(imageurl);
if (null != imageSize) {
//xxxx
} else {
//xxxxxxx
}
return bitmap;
}
});
最新文章
- 跨应用使用Spoon框架截图的方法
- python中__init__问题
- Spring MVC之@RequestBody, @ResponseBody 详解
- java内存模型-锁
- lvs简单配置
- ionic默认样式android和ios的一些不同(当时真是纠结啊~)
- Bootstrap 模态对话框 remote指定内容加载
- 谈话ZooKeeper(一个)分析ZooKeeper的Quorums机制--预防Split-Brain问题
- [2014-09-18]Entity Framework 6 预热、启动优化
- ubuntu14.04 解决屏幕亮度无法调节的问题
- 分布式计算框架学习笔记--hadoop工作原理
- AF_INET 和PF_INET区别;AF_LOCAL PF_LOCAL 区别.
- 【操作系统】二、JVM线程与Linux内核线程的映射
- jQuery 选择器 筛选器 样式操作 文本操作 属性操作 文档处理 事件 动画效果 插件 each、data、Ajax
- virtual 初探
- Easyui1.3.4+IIS6.0+IE8兼容问题解决
- oracle创建新的用户 创建序列 并生成自动自增
- 有趣:256个class选择器可以干掉1个id选择器——张鑫旭
- SQL简单基础(2)
- 流媒体协议之JRTPLIB的使用20170919
热门文章
- WPF中在Gmap.net中将Marker动起来
- 【认证与授权】Spring Security的授权流程
- 负载均衡服务之HAProxy基础配置(五)
- php中session_id()函数详细介绍,会话id生成过程及session id长度
- SESSION劫持
- build.gradle 详解(一)
- 利用CRM实现电话营销部门的管控 之数据暂缓
- dlopen failed: empty/missing DT_HASH in "libx.so" (built with --hash-style=gnu?)
- mybatis源码学习(三):MappedStatement的解析过程
- 关于IE8上传文件的一些问题