1 Bitmap加载方式

在介绍Bitmap--OOM 异常时,首先介绍一下Bitmap有哪几种加载方式。通常Bitmap的加载方式有Resource资源加载、本地(SDcard)加载、网络加载等加载方式。

1.1 Resource资源加载

  1. Assets资源加载方式:

    1. AssetManager am = getAssets();
    2. InputStream is = am.open("high_pixel_img.jpg");
    3. Bitmap bitmap = BitmapFactory.decodeStream(is);
  2. Res资源加载方式:
    1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);

1.2 本地(SDcard)加载

  1. String file_name = Environment.getExternalStorageDirectory().toString()+"/"+"high_pixel_img.jpg";
  2. nbsp;Bitmap bitmap = BitmapFactory.decodeFile(file_name);

文件描述符

1.3 网络加载

注意:网络加载图片的时候必须在非主线成中操作

  1. String website = "http://www.baidu.com/img/baidu_sylogo1.gif";
  2. URL image_url = new URL(website);
  3. HttpURLConnection conn = (HttpURLConnection) image_url.openConnection();
  4. conn.connect();
  5. InputStream is = conn.getInputStream();
  6. bitmap = BitmapFactory.decodeStream(is);

2 Bitmap | Drawable | InputStream | Byte[ ] 之间进行转换

2.1 Drawable转化成Bitmap

  1. Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
  2. Bitmap bitmap = Bitmap.createBitmap(
  3. drawable.getIntrinsicWidth(),
  4. drawable.getIntrinsicHeight(),
  5. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
  6. : Bitmap.Config.RGB_565);
  7. Canvas canvas = new Canvas(bitmap);
  8. //canvas.setBitmap(bitmap);
  9. drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
  10. drawable.draw(canvas);

2. 2 Bitmap转换成Drawable

  1. Drawable drawable = new BitmapDrawable(bitmap);

2.3 Bitmap转换成byte[]

  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
  4. byte[] info = baos.toByteArray();

2.4 byte[]转换成Bitmap

  1. Bitmap bitmap = BitmapFactory.decodeByteArray(byte, 0, b.length);

2.5 InputStream转换成Bitmap

  1. InputStream is  = getResources().openRawResource(id);
  2. Bitmap bitmap = BitmaoFactory.decodeStream(is);

2.6 InputStream转换成byte[]

  1. InputStream is = getResources().openRawResource(id);//也可以通过其他方式接收一个InputStream对象
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. byte[] b = new byte[1024*2];
  4. int len = 0;
  5. while ((len = is.read(b, 0, b.length)) != -1)
  6. {
  7. baos.write(b, 0, len);
  8. baos.flush();
  9. }
  10. byte[] bytes = baos.toByteArray();

3 转换Bitmap大小

  1. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.high_pixel_img);
  2. Bitmap target = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
  3. Canvas canvas = new Canvas(tartget);
  4. canvas.scale(scale,scale);
  5. Paint paint = new Pain(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
  6. canvas.drawBitmap(bitmap,0,0,paint);
  7. bitmap.recycle();

4 将Bitmap保存为本地文件

  1. String filename = "save.jpg";
  2. File file = new File(Environmnet.getExternalStorageDirectory,filename);
  3. try{
  4. OutputStream os  =  new FileOutputString(file);
  5. bitmap.compress(CompressFormat.JPEG,100,os);
  6. }catch(FileNotFoundException e){
  7. e.printStackTrace();
  8. }

以上是关于Bitmap的相关操作,如果大家在阅读中发现有什么问题,请在评论中留言。

Android Bitmap开发之旅--基本操作的更多相关文章

  1. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  2. 勤拂拭软件Android开发之旅(1) 之 Android 开发环境搭建

    勤拂拭软件工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html 勤拂拭软件Android开发之旅目录 ...

  3. Android开发之旅(1) 之 Android 开发环境搭建

    工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...

  4. Android项目开发全程(二)--Afinal用法简单介绍

    本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...

  5. android ndk开发(二)实现一个官方demo

    实现了一个官方的demo:bitmap-plasma(水波纹) 源代码就在samples文件夹下,可以自己去找. 界面: 建立项目的步骤和配置环境不明白的可以去看:http://www.cnblogs ...

  6. Android软件安全开发实践(下)

    Android开发是当前最火的话题之一,但很少有人讨论这个领域的安全问题.本系列将分两期,探讨Android开发中常见的安全隐患和解决方案.第一期将从数据存储.网络通信.密码和认证策略这三个角度,带你 ...

  7. 调研Android平台开发环境的发展演变

    Android是Google推出的开源手机操作系统,主要以开发应用为主,要进行Android开发首先得搭建好开发平台.最近在搭建Android的开发环境,发现往往一个小问题都能花费你大半天时间,从刚开 ...

  8. Android Bitmap 全面解析(四)图片处理效果对比 ...

    对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...

  9. 转——Android应用开发性能优化完全分析

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.] 1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉 ...

随机推荐

  1. JavaScript 获取Select标签选中的项

    <select name="select1" id="select1" onchange=setInput()> <option value= ...

  2. YII 小部件实现的注册表

    今天来进行用户注册功能yii集成了很多验证框架,framework/validators下面,这个文件夹的最后一个文件CValidator.php 是总的验证信息,根据请求参数决定需要那种验证 如:u ...

  3. Python学习的一些好资料

    教程: 1. 廖雪峰的Python教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a0 ...

  4. iscc2016-好长的字符串

    Vm0wd2QyVkhVWGhVYmxKV1YwZDRXRmxVUm5kVlJscHpXa2M1VjFKdGVGWlZNbmhQWVd4YWMxZHViRmROYWxaeVdWZDRZV014WkhG ...

  5. sql restore mode

    refer : https://msdn.microsoft.com/en-us/library/ms189272.aspx SELECT name, recovery_model_desc FROM ...

  6. ms08-067

    http://wenku.baidu.com/view/f473355077232f60ddcca119.html

  7. Qt之自定义托盘(两种方法)

    http://www.cnblogs.com/swarmbees/p/5789482.html http://www.cnblogs.com/swarmbees/p/5812031.html

  8. 除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)

    首先,在创立窗口对象的时候,CreateWindowEx就可以指定窗口的位置.除此之外,还有三种方法可以改变窗口的位置: procedure TWinControl.CreateWindowHandl ...

  9. Hibernate 事物隔离级别 深入探究

    目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 Hi ...

  10. java根据本地Ip获取mac地址

    import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; impo ...