Android中图片的读取,修改,显示和保存涉及到的类大致如图所示。
在读取图片文件时,先将图片文件转换为InputStream对象,然后通过BitmapFactory将其转换为Bitmap对象。
在图片保存时,先将Bitmap对象转换为OutputStream对象,然后再将OutputStream输出到文件中。
如果要对图片进行修改,可以通过将Bitmap对象转换为颜色数组(int[])来修改,也可以通过Canvas来修改。此外Bitmap类提供了一个createBitmap的静态方法,可以对Bitmap对象做一些转换。
显示图片时,可以将Bitmap对象转换为Drawable对象,然后设置给ImageView。
本文介绍图片文件的读取。
Android支持的图片格式
目前在Android中支持的图片文件格式如下。其中WebP格式是从Android4.0开始支持,但在Android4.0到Android4.2.1之间的Android系统不支持无损压缩和有透明度的WebP格式图片,Android4.2.1之后才开始支持所有的WebP格式图片。
下图截取自http://developer.android.com/guide/appendix/media-formats.html
读取图片文件到InputStream
1、读取SD卡中的图片到InputStream
对SD卡中的文件,获取到文件的路径之后便可以通过FileInputStream类来生成InputStream。FileInputStream类是InputStream类的派生类。代码示例如下。
FileInputStream stream = new FileInputStream(fileName);
2、读取resource中的图片到InputStream
对resource/drawable目录下的图片,每个文件都会在R文件中生成一个对应的整数id,通过“R.drawable.文件名”来得到id值,然后通过Resource类的openRawResource()来得到该文件对应的InputStream对象。代码示例如下。
InputStream strem = getResources().openRawResource(R.drawable.name);
3、读取assets中的图片到InputStream
对assets目录中的图片,先通过getAssets()得到AssetManager对象,然后通过AssetManager对象的open方法来打开文件,得到该文件对应的InputStream对象。代码示例如下。
InputStream strem = getAssets().open("apple.png");
注意:如果图片在assets根目录,读取时只需要加图片文件名,不需要加/assets/,图片文件名需要包含扩展名。如果图片在assets的子目录中,需要加上子目录的路径,例如apple.png在/asser