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. CentOS 忘记root密码,解决方法

    1.开机后,在倒数5秒结束前,按下任意键 2.在显示centos...的那个界面下,按e键(edit) 3.会出现三行的界面,选择中间 kernel...那行,然后按e键 4.在接着出现的那个界面最后 ...

  2. MyBatis Generator自动生成MyBatis的映射代码

    MyBatis Generator大大简化了MyBatis的数据库的代码编写,有了一个配置文件,就可以直接根据表映射成实体类.Dao类和xml映射.资源地址:MyBatis项目地址:http://my ...

  3. Java笔记原生数据类型【二】

    1.Java中的数据类型分为: 1)原生类型(primitive Data type) 2.)引用类型(对象类型) (Reference Type) 1.变量和常量: 常量: 就是值不会变化的量: 变 ...

  4. 老oj3444 && Pku3241 Object Clustering

    Description We have N (N ≤ 10000) objects, and wish to classify them into several groups by judgemen ...

  5. js 外部文件加载处理

    概述 前端在日常工作中很大一部分时间是在思考页面的优化方案,让页面载入得更快.鉴于javascript是单线程的事件驱动语言,优化工作之一就是:控制图片.swf.iframe等大流量文件以及js和cs ...

  6. IBM Websphere 说明文档

    http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.nd.doc%2Finfo%2F ...

  7. Response对象

    Response对象来自HttpResponse类,它用于向客户端输出信息或设置客户端输出状态,使用Response对象可以直接发送信息给浏览器.重定向浏览器到另一个URL或设置cookie的值等. ...

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

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

  9. myisam和innodb索引实现的不同

    1.MyISAM 使用B+Tree 作为索引结构,叶子节点的data存放指针,也就是记录的地址.对于主键索引和辅助索引都是一样的.2.InnoDB 也使用B+Tree作为索引结构,也别需要注意的是,对 ...

  10. 【HDOJ】2364 Escape

    bfs.题目做的不细心,好多小错误.尤其注意起始点就是边界的情况.wa了八次. #include <iostream> #include <cstdio> #include & ...