Android中的位图资源简介
2012-07-25 17:20
197 查看
Android支持四种类型的位图(Bitmap)分别为ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,常用的类型是ARGB_8888和RGB_565。ARGB_8888类型的位图为32位的位图,它的每一个像素点有32位组成,每8位一组,每组代表的意思分别为Alpha(透明度)、Red(红)、Green(绿)、Blue(蓝);RGB_565类型的位图为16位位图,前7位表示Red(红),中间8位表示Green(绿),最后7位表示Blue(蓝)。在Android中图像使用Bitmap类表示,可以在需要处理图像的时候,使用BitmapFactory类提供的方法加载图片资源或者使用Bitmap类提供的方法创建位图资源。 一、加载位图资源 在Android中图片资源通常会放置于res/drawable目录或者assets目录,下面分别对这两种不同的情况进行分析。 使用BitmapDrawable加载res/drawable目录下的android.png资源文件,Java代码如下: [代码]java代码: view sourceprint?01 //获取res目录下的drawable资源 02 public Bitmap getDrawableBitmap() { 03 //获取应用资源集管理实例 04 Resources mResources = getResources(); 05 //获取drawable资源frame,转换为 BitmapDrawable类型 06 BitmapDrawable mBitmapDrawable = (BitmapDrawable) mResources.getDrawable(R.drawable.android); 07 //获取bitmap 08 Bitmap mBitmap = mBitmapDrawable.getBitmap(); 09 10 return mBitmap; 11 } 使用上面的方法获取bitmap时需要注意,这种方法只能对于普通的图片资源,对于点九图片或者其他的drawable类型不能直接获取,可以通过BitmapFactory类进行加载。BitmapFactory类提供了很多decode开头的方法,通过这些方法可以加载所有类型的图片资源。 使用BitmapFactory类的decodeResource加载res/drawable目录下的android.png资源文件,Java代码如下: [代码]java代码: view sourceprint?1 //获取res目录下的drawable资源 2 public Bitmap getResourceBitmap() { 3 Resources mResources = getResources(); 4 Bitmap mBitmap = BitmapFactory.decodeResource(mResources, R.drawable.android); 5 6 return mBitmap; 7 } 也可以使用BitmapFactory类的decodeStream加载assets文件夹下的图片资源,Java代码如下: [代码]java代码: view sourceprint?01 //获取assets目录下的图片资源 02 public Bitmap getAssetsBitmap() { 03 //定义Bitmap 04 Bitmap mBitmap = null; 05 06 //获取assets资源管理实例 07 AssetManager mAssetManager = getAssets(); 08 09 try { 10 //打开frame.png文件流 11 InputStream mInputStream = mAssetManager.open("android.png"); 12 //通过decodeStream方法解析文件流 13 mBitmap = BitmapFactory.decodeStream(mInputStream); 14 } catch (IOException e) { 15 // TODO Auto-generated catch block 16 e.printStackTrace(); 17 } 18 19 return mBitmap; 20 } 二、创建位图资源 在应用中既可以加载已经存在的图片资源,也可以通过Bitmap类提供的方法创建新的位图资源,还可以在新建的位图资源上绘制几何图形、其他的位图资源或者drawable资源。通常在进行图像变换时,为了不改变原来的位图资源,在图像变换之前会建立一个新的位图,然后在新建立的位图上进行操作。如果需要在位图上进行绘图,就需要使用Canvas类和Paint类。Canvas类代表了一块画板,而Panit类代表了画笔,它们很形象地描述了绘画模型。如果要处理bitmap时,需要把bitmap与Canvas关联起来,这样就可以把Bitmap作为画板,使用Paint设置绘画的风格,然后使用Canvas的draw方法进行绘图。 下面的代码演示了如何创建一个Bitmap,然后在bitmap上进行绘图,Java代码如下: [代码]java代码: view sourceprint?01 //创建Bitmap资源 02 public Bitmap drawGraphics() { 03 //创建大小为320 x 480的ARGB_8888类型位图 04 Bitmap mBitmap = Bitmap.createBitmap(320, 480, Config.ARGB_8888); 05 //把新建的位图作为画板 06 Canvas mCanvas = new Canvas(mBitmap); 07 08 //先画一个黑屏 09 mCanvas.drawColor(Color.BLACK); 10 //创建画笔,并进行设置 11 Paint mPaint = new Paint(); 12 mPaint.setColor(Color.BLUE); 13 mPaint.setStyle(Style.FILL); 14 15 Rect mRect = new Rect(10, 10, 300, 80); 16 RectF mRectF = new RectF(mRect); 17 //设置圆角半径 18 float roundPx = 15; 19 20 mPaint.setAntiAlias(true); 21 mCanvas.drawRoundRect(mRectF, roundPx, roundPx, mPaint); 22 mPaint.setColor(Color.GREEN); 23 mCanvas.drawCircle(80, 180, 80, mPaint); 24 25 DashPathEffect mDashPathEffect = new DashPathEffect(new float[] {20, 20, 10, 10, 5, 5,}, 0); 26 mPaint.setPathEffect(mDashPathEffect); 27 Path mPath = new Path(); 28 mRectF.offsetTo(10, 300); 29 mPath.addRect(mRectF, Direction.CW); 30 31 mPaint.setColor(Color.RED); 32 mPaint.setStrokeWidth(5); 33 mPaint.setStrokeJoin(Join.ROUND); 34 mPaint.setStyle(Style.STROKE); 35 mCanvas.drawPath(mPath, mPaint); 36 37 mCanvas.drawBitmap(getDrawableBitmap(), 160, 90, mPaint); 38 39 return mBitmap; 40 } 上面的代码表示在位图上分别绘制了圆角矩形区域、圆形区域、虚线矩形框和图片资源,运行效果如下: 图7-1 创建位图资源 三、保存位图资源 当绘制了新的bitmap,或者修改了原始的bitmap之后,可以把修改的结果保存成图片文件,这样就可以在其他的地方使用了。Bitmap类提供了compress方法,可以很方便地把bitmap压缩并保存到图片文件中,在android中可以把bitmap保存成png和jpg两种格式的文件,对于png格式的图片来说它是属于无损压缩,而对于jpg格式的图片来说可以设置图片压缩的质量。 通过下面的代码可以把上一部分中创建的图片压缩并保存为png图片: [代码]java代码: view sourceprint?01 //保存位图资源 02 public static void saveBitmap(Bitmap bitmap, String path) { 03 FileOutputStream mFileOutputStream = null; 04 05 try { 06 File mFile = new File(path); 07 //创建文件 08 mFile.createNewFile(); 09 //创建文件输出流 10 mFileOutputStream = new FileOutputStream(mFile); 11 //保存Bitmap到PNG文件 12 //图片压缩质量为75,对于PNG来说这个参数会被忽略 13 bitmap.compress(CompressFormat.PNG, 75, mFileOutputStream); 14 //Flushes this stream. 15 //Implementations of this method should ensure that any buffered data is written out. 16 //This implementation does nothing. 17 mFileOutputStream.flush(); 18 } catch (IOException e) { 19 // TODO Auto-generated catch block 20 e.printStackTrace(); 21 } finally { 22 try { 23 mFileOutputStream.close(); 24 } catch (IOException e) { 25 // TODO: handle exception 26 e.printStackTrace(); 27 } 28 } 保存之后的图片为: 图7-2 保存位图资源 Demo源代码下载:Bitmap_test.rar
Demo源代码下载:Bitmap_test.rar
相关文章推荐
- Android中的位图资源简介 创建 加载 保存
- 转:Android中的位图资源简介
- Android的资源类型和存储方式简介-android学习之旅(五十二)
- Android的资源类型和存储方式简介-android学习之旅(五十二)
- [原]Android布局类型资源简介
- Android资源文件简介
- Android布局类型资源简介
- Android资源管理框架(Asset Manager)简介和学习计划
- Android资源文件简介
- Android资源文件简介
- Android资源管理框架(Asset Manager)(一)简介
- Android 系统资源(字体,声音,视频)的简介
- Android 中的资源访问(简介/颜色)
- android res 资源简介
- [素材资源] Android开发性能优化简介(非常不错的)
- Android 资源详解(一) 颜色、字符串、位图资源
- Android资源文件简介
- Android资源管理框架(Asset Manager)简介
- Android资源文件简介
- Android资源管理框架(Asset Manager)简介和学习计划