Bitmap,是android为开发者提供的图像处理。我把它想象成一个PS软件。以某种方式获取一张图,对它进行处理(包括缩放、裁剪、旋转等等),然后再把这个图以某种方式输出,显示或形成文件流等等。用完之后一定要记得关掉(回收)PS(Bitmap)。因为就像PS一样,Bitmap是很吃内存的。同时开两个PS电脑会卡爆,Bitmap也会让App产生OOM。
Bitmap的API太多,所以,我决定用这个博客,将我所见到的,尝试的好例子,都搬上来,方便自己以后在不会写时过来翻一翻。同时也是因为,网上带坑的Bitmap例子实在太多,我在这里做一个愚公移山的过滤 。
第一段先转田海立老师的一篇博客 http://blog.csdn.net/thl789/article/details/6762030
这篇博客为我对Bitmap的初始认知打下了基础。
一、Bitmap的生成
1.1 BitmapFactory decode出Bitmap
Bitmap实现在android.graphics包中。但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化。这必然是某个辅助类提供了创建Bitmap的接口,而这个类的实现通过JNI接口来实例化Bitmap的,这个类就是BitmapFactory。
如上图可以看到,BitmapFactory可以有如上几种方法创建Bitmap并获取图片。
大致分个类有5种:
1、InputStream
2、FileDescriptor
3、String(pathName)
4、byte[]
5、Resources
其中,除了第2个都挺容易理解是什么东西的。第2个通常查阅得,通俗地来说,它是一个文件描述。每当开发者创造一个文件流,这个文件描述就伴随而生了。开发者可以用.getFD();方法获取这个对象。它的真正作用是对系统平台 file descriptor 的封装,Java 中的 System.out, System.err, System.in 就是通过这个来获得操作系统对应的句柄。
在此,只介绍几种比较常用的获取方法。
1)InputStream:
String pathName = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Download/59e58PICyB8.jpg"; try{ Log.d("tag","获取文件流"); file = new File(pathName); inputStream = new FileInputStream(file); bitmap = BitmapFactory.decodeStream(inputStream); }catch (Exception e){ e.printStackTrace(); }finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
2)String(pathName)
String pathName = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Download/59e58PICyB8.jpg"; try{ file = new File(pathName); inputStream = new FileInputStream(file); bitmap = BitmapFactory.decodeStream(inputStream); }catch (Exception e){ }finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
3)Resources
bitmap = BitmapFactory.decodeResource(getResources() , R.drawable.ic_launcher);
4)Asset
Asset中的文件用的还是输入文件流的办法,只需要将Asset中的文件转化成输入流,输入到bitmap工厂中生成bitmap即可。
AssetManager am = getAssets(); try { InputStream inputStream1 = am.open("qqimage.jpg"); bitmap = BitmapFactory.decodeStream(inputStream1); } catch (IOException e) { e.printStackTrace(); }
先这样!Duang!~~