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. dedecms织梦二级菜单的实现方法

    首先,复制代码: 程序代码 {dede:channelartlist typeid='top' cacheid='channelsonlist'} {dede:channel type='son' n ...

  2. jquery 获取元素的 实际宽度和高度

    jquery outerHeight方法 outerWidth方法 转: http://www.cnblogs.com/zhja/archive/2012/11/07/2758665.html jqu ...

  3. C++实现红黑树,仿STL封装

    //RB_Tree.hpp //The code of red black trees //2011/12/31 by Adoo // The foundation :http://www.roadi ...

  4. DbUtils组件

    DbUtils组件 DbUtils组件, 1. 简化jdbc操作 2. 下载组件,引入jar文件 : commons-dbutils-1.6.jar |-- DbUtils 关闭资源.加载驱动 |-- ...

  5. python Hbase Thrift pycharm 及引入包

    cp -r hbase/ /usr/lib/python2.7/site-packages/ 官方示例子http://code.google.com/p/hbase-thrift/source/bro ...

  6. 【Java】理解 UDDI

    跟上规范的不断发展 统一描述.发现和集成(Universal Description, Discovery, and Integration,UDDI)项目继续丰富企业用于在 UDDI 业务注册中心表 ...

  7. exceptions.IOError: decoder jpeg not available

    1.确保安装PIL所需的系统库 yum -y install zlib yum -y install  zlib-devel yum -y install libjpeg yum -y install ...

  8. cf C Bear and Prime Numbers

    题意:给你一个n,输入n个数,然后输入m,接下来有m个询问,每一个询问为[l,r],然后输出在区间内[l,r]内f(p)的和,p为[l,r]的素数,f(p)的含义为在n个数中是p的倍数的个数. 思路: ...

  9. 模态运行EXE程序

    function ExecShowModal(APath: PChar; ACmdShow: Integer; ATimeout: Longword): Integer; var vStartupIn ...

  10. 深入浅出 Java Concurrency (2): 原子操作 part 1

    转:http://www.blogjava.net/xylz/archive/2010/07/01/324988.html 从相对简单的Atomic入手(java.util.concurrent是基于 ...