异步加载图片以及Bitmap相关处理方法
私类:
// 异步更新Image
private class GetImageTask extends AsyncTask<String, Void, Bitmap> { // 覆写的方法,这个方法将在这个类的对象execute()的时候调用
protected Bitmap doInBackground(String... urls) {
Bitmap bmp = null;
Bitmap newBitmap = null;
int bmWidth, bmHeight;
try {
bmp = FileUtil.getBitmapByPath(urls[0]);//本地图片获得Bitmap
bmWidth = bmp.getWidth();
bmHeight = bmp.getHeight(); // 图片过大就剪裁以下
if ((bmWidth > 240) || (bmHeight > 240)) {
newBitmap = fileUtil.imageCropSquare(bmp);//从bitmap剪裁为正方形Bitmap
} else {
newBitmap = bmp;
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newBitmap;
} @Override
// 覆写的方法,当耗时的操作执行完之后执行,这里就是把获得的Bitmap更新到ImageView上
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
imgPostPic.setImageBitmap(result); }
getBitmapByPath本地图片路径获得BitMap方法:
/**
* 从本地路径获取、生成与原图同样大小的Bitmap,不作压缩
*
* @param path
* @return
*/
public static Bitmap getBitmapByPath(String path) {
if (path == null){
return null;
} Bitmap bmTemp = null;
if (bmTemp == null) {
try {
bmTemp = BitmapFactory.decodeFile(path);
} catch (Exception e) {
e.printStackTrace();
} catch (Error e) {
e.printStackTrace();
}
}
return bmTemp;
}
网络图片路径获得Bitmap的方法
/**
* Android获取网络图片转换成Bitmap
*
* @return Bitmap
*/ private static final int IO_BUFFER_SIZE = 4 * 1024;// 设置缓冲区大小 public static Bitmap GetBitmapFromWeb(String url) {
Bitmap bitmap = null;
InputStream in = null;
BufferedOutputStream out = null;
try {
System.out.println("GetLocalOrWebBitmap HEAD, url:" + url);
in = new BufferedInputStream(new URL(url).openStream(),
IO_BUFFER_SIZE);
final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE);
copy(in, out);
out.flush();
byte[] data = dataStream.toByteArray();
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
data = null;
System.out.println("GetLocalOrWebBitmap END");
return bitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
} // 附加的copy函数
private static void copy(InputStream in, OutputStream out)
throws IOException {
byte[] b = new byte[IO_BUFFER_SIZE];
int read;
while ((read = in.read(b)) != -1) {
out.write(b, 0, read);
}
}
正方形Bitmap剪裁:
/**
* 按正方形裁切图片 */ public Bitmap imageCropSquare(Bitmap bitmap) { int w = bitmap.getWidth(); // 得到图片的宽,高
int h = bitmap.getHeight();
int wh = w > h ? h : w;// 裁切后所取的正方形区域边长
int retX = w > h ? (w - h) / 2 : 0;//基于原图,取正方形左上角x坐标
int retY = w > h ? 0 : (h - w) / 2; //下面这句是关键 return Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false); }
异步加载图片以及Bitmap相关处理方法的更多相关文章
- Android 实现ListView异步加载图片
ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...
- ListView异步加载图片
ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...
- [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...
- Android之ListView异步加载图片且仅显示可见子项中的图片
折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...
- android listview 异步加载图片并防止错位
网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- ListView异步加载图片,完美实现图文混排
昨天参加一个面试,面试官让当场写一个类似于新闻列表的页面,文本数据和图片都从网络上获取,想起我还没写过ListView异步加载图片并实现图文混排效果的文章,so,今天就来写一下,介绍一下经验. Lis ...
- 软引用SoftReference异步加载图片
HashMap<String, SoftReference<Drawable>> imageCache 关于SoftReference这个类多少知道些机制,会用就ok了. 机制 ...
随机推荐
- python之路(八)-迭代器&生成器
迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...
- openXML向Word插入表
表是 Word 中的另一类型的块级内容,它是以行和列排列的一组段落(以及其他块级内容). Word 中的表格通过 tbl 元素定义,该元素类似于 HTML <表格>标记. 表元素指定文档中 ...
- 网络操作系统 第七章 管理TCP/IP网络
本章小结 本章介绍了TCP/IP的相关概念,并且在此处基础上,介绍了Windows Server 2008中使用TCP/IP网络配置工具实现网络连接和管理的方法,在Linux系统中,讲解了是如何使用图 ...
- jdk环境变量的设置
一.jdk下载网址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.环境变 ...
- day17_雷神_数据库 小全
# 数据库 1.mysql 介绍 一 数据库管理软件的由来 程序的所有组件不可能只在一个机子上,性能问题和单点故障, 程序分散了,还需要解决数据共享问题, 基于网络访问这台共享的机器,用socket. ...
- Asp.net Identity框架
Identity提供基于用户和角色的membership管理框架,基本上可以满足业务项目登录操作的所有功能需求. 如果要使用这套框架需要新建User和Role类型分别继承自IUser<TKey& ...
- Redux和React
export app class Compo1 extends Component{ } Compo1.propType = { a:PropTypes.string, fn:PropTypes.fu ...
- Java基础知识提要
1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出Java特 ...
- 《JavaScript 高级程序设计》读书笔记三 基本概念
一 语法 区分大小写,驼峰式书写方式: 严格模式:“use strict”: 二 数据类型 a. 基本数据类型: undefined 声明变量未初始化 null 空指针,可以释放内存 Boole ...
- 【BZOJ4883】 [Lydsy1705月赛]棋盘上的守卫(最小生成树,基环树)
传送门 BZOJ Solution 考虑一下如果把行,列当成点,那么显然这个东西就是一个基环树对吧. 直接按照\(Kruscal\)那样子搞就好了. 代码实现 代码戳这里