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. jQuery api 学习笔记(1)

      之前自己的jquery知识库一直停留在1.4的版本,而目前jquery的版本已经更新到了1.10.2了,前天看到1.10中css()竟然扩充了那么多用法,这2天就迫不及待的更新一下自己的jquer ...

  2. Java 8 与 .Net的平台发展

    从早期版本中,我们已经可以领略到一些令人兴奋的特性.但是开发真Andrew C.Oliver表示,尽管如此,Java语言在某些特性上还是落后于.Net.比如,Java 8 中最令人期待的Lambda表 ...

  3. 防止mysql注入

    function check($sql_str) { $checks=eregi('select|insert|update|delete|\'|\/|\\\|\*|\.|union|into|loa ...

  4. angularjs 实现排序功能

    实现公式:{{orderBy_expression | orderBy:expression:reverse}} Example <script> var app=angular.modu ...

  5. Python Tutorial 学习(五)--Data Structures

    5. Data Structures 这一章来说说Python的数据结构 5.1. More on Lists 之前的文字里面简单的介绍了一些基本的东西,其中就涉及到了list的一点点的使用.当然,它 ...

  6. java单点登录系统CAS的简单使用

    转:http://blog.csdn.net/yunye114105/article/details/7997041 背景 有几个相对独立的java的web应用系统, 各自有自己的登陆验证功能,用户在 ...

  7. javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第1/2页

    由于时间比较紧,没多的时候去学习研究上述工具包,现在用javascript操作ActiveXObject控件,用替换word模板中的书签方式解决. 最近有需求将数据导出到word里,然后编辑打印. 想 ...

  8. Popular Deep Learning Tools – a review

    Popular Deep Learning Tools – a review Deep Learning is the hottest trend now in AI and Machine Lear ...

  9. Javascript 层次

    1. HTML5, Tool, Framework ---------------------------UI: Liger UI, jQuery UI, jQuery Mobile -------- ...

  10. bzoj1221

    网络流与线性规划24题中的餐巾计划吧明显要拆点吧,把每一天拆成2个点,i,i+n起点   终点    容量    费用 s      i      inf      c    每天都可以购买新毛巾 i ...