私类:

// 异步更新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相关处理方法的更多相关文章

  1. Android 实现ListView异步加载图片

    ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...

  2. ListView异步加载图片

    ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; ...

  3. Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...

  4. [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<Strin ...

  5. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

  6. android listview 异步加载图片并防止错位

    网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...

  7. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  8. ListView异步加载图片,完美实现图文混排

    昨天参加一个面试,面试官让当场写一个类似于新闻列表的页面,文本数据和图片都从网络上获取,想起我还没写过ListView异步加载图片并实现图文混排效果的文章,so,今天就来写一下,介绍一下经验. Lis ...

  9. 软引用SoftReference异步加载图片

    HashMap<String, SoftReference<Drawable>> imageCache 关于SoftReference这个类多少知道些机制,会用就ok了. 机制 ...

随机推荐

  1. 网络操作系统 第十章 DNS服务器管理与配置

    1.什么是域名系统?描述域名解析的过程. 1)域名系统:Domain Name System缩写DNS,是因特网的一项核心服务 域名系统作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方 ...

  2. Codeforces831A Unimodal Array

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  3. VS code的疑惑之处

    作为一个新手,我充满疑惑 eg:下载了git但无法使用匹配 然后在各位博主的详细解释下知道 VS code更新后的git.path被格式化了: so需要进行路径覆盖. 在这之后我的终端依旧出现问题   ...

  4. Vmware12 u盘启动系统

    先插U盘,再打开虚拟机 创建一个虚拟机 点击添加硬盘,下一步 先择SCSI,下一步 选择如图所示,有可能是1,也可能是2,这项就是U盘 设置完毕后,打开虚拟机,赶紧按F2,ESC 或者F12,这个是看 ...

  5. ActiveMQ 的安装与使用

    消息中间件简介 消息中间件(MOM:Message Orient middleware) 消息中间件有很多的用途和优点: 1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外 ...

  6. Day5:html和css

    Day5:html和css 如何实现盒子居中问题,要让盒子实现水平居中,要满足是快级元素,而且盒子的宽度要定义.然后数值为auto即可. .dashu { width: 100px; margin: ...

  7. 实现简易Promise

    概述 异步编程离不开promise, async, 事件响应这些东西,为了更好地异步编程,我打算探究一下promise的实现原理,方法是自己实现一个简易的promise. 根据promise mdn上 ...

  8. js实现复制内容自动添加版权信息

    场景:当我从网上复制了所需代码到编辑器粘贴时,总会有如下版权信息提示   看到好几次后,在好奇心的驱使下开始搜寻答案.网上有好几种写法,最开始我找到了如下JS代码 document.body.onco ...

  9. Boostnote 为程序员的开源式记事本

    以前使用win10的时候,有个edairy可以使用,并且效果非常好,现在ubuntu上使用的时候,才找个这样的程序员实在太难了,找了好久,才找到一个使用比较顺手的,这里就做个备忘了,顺便做个推荐,实在 ...

  10. Canny算子

    Canny边缘检测算子是John F. Canny于1986年开发出来的一个多级边缘检测算法.更为重要的是Canny创立了“边缘检测计算理论”(computational theory of edge ...