Android学习笔记进阶18之画图并保存图片到本地

炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述Android学习笔记进阶18之画图并保存图片到本地相关的知识,希望能为你提供帮助。
1、首先创建一个Bitmap图片,并指定大小;
 
2、在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可;
 
3、需要保存的目录File,注意如果写的目录如“/sdcard/song/”如果不存在的话,要先创建(file.mkdirs).。

4、需要添加权限:< uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Canvas是一个画布,你可以建立一个空白的画布,就直接new一个Canvas对象,不需要参数。也可以先使用BitmapFactory创建一个Bitmap对象,作为新的Canvas对象的参数,也就是说这个画布不是空白的,如果你想保存图片的话,最好是Bitmap是一个新的,而不是从某个文件中读入进来的,或者是Drawable对象。然后使用Canvas画第一张图上去,在画第二张图上去,最后使用Canvas.save(int flag)的方法进行保存,注意save方法里面的参数可以保存单个图层,如果是保存全部图层的 话使用 save( Canvas.ALL_SAVE_FLAG )。
【Android学习笔记进阶18之画图并保存图片到本地】 
关于图片旋转问题不懂的话,请看博文:Android学习笔记之Bitmap位图的旋转
                                                              这是原图片和旋转后图片

Android学习笔记进阶18之画图并保存图片到本地

文章图片
 
Android学习笔记进阶18之画图并保存图片到本地

文章图片

                                                                                                                                        这是保存到本地的图片800*600 JPG格式
 
具体实现:
[java] view plain copy
  1. package  xiaosi.bitmap;    
  2.    
  3. import  android.app.Activity;    
  4. import  android.os.Bundle;    
  5.    
  6. public  class  mianActivity  extends  Activity   
  7. {   
  8.    
  9.         private  BitmapView  bitmapView  =  null;    
  10.         @Override   
  11.         protected  void  onCreate(Bundle  savedInstanceState)   
  12.         {   
  13.                 super.onCreate(savedInstanceState);    
  14.                 bitmapView  =  new  BitmapView(this);    
  15.                 setContentView(bitmapView);    
  16.         }   
  17. }   

BitmapView.Java
[java] view plain copy
  1. package  xiaosi.bitmap;    
  2.    
  3. import  java.io.File;    
  4. import  java.io.FileOutputStream;    
  5.    
  6. import  android.content.Context;    
  7. import  android.content.res.Resources;    
  8. import  android.graphics.Bitmap;    
  9. import  android.graphics.Bitmap.Config;    
  10. import  android.graphics.BitmapFactory;    
  11. import  android.graphics.Canvas;    
  12. import  android.graphics.Color;    
  13. import  android.graphics.Matrix;    
  14. import  android.view.View;    
  15.    
  16. public  class  BitmapView  extends  View   
  17. {   
  18.         private  Matrix  matrix  =  null;    
  19.         public  BitmapView(Context  context)   
  20.         {   
  21.                 super(context);    
  22.         }   
  23.    
  24.         public  void  onDraw(Canvas  canvas)   
  25.         {   
  26.                    
  27.                 //  获取资源文件的引用res   
  28.                 Resources  res  =  getResources();      
  29.                 //  获取图形资源文件   
  30.                 Bitmap  bmp  =  BitmapFactory.decodeResource(res,  R.drawable.h);    
  31.                 //  设置canvas画布背景为白色   
  32.                 canvas.drawColor(Color.BLACK);    
  33.                 canvas.drawBitmap(bmp,  0,  0,  null);    
  34.                 //  定义矩阵对象   
  35.                 matrix  =  new  Matrix();    
  36.                 //旋转30度   
  37.                 matrix.postRotate(30);    
  38.                 Bitmap  bitmap  =  Bitmap.createBitmap(bmp,  0,  50,  bmp.getWidth(),  bmp.getHeight()/2,   
  39.                                 matrix,  true);    
  40.                 canvas.drawBitmap(bitmap,  0,  250,  null);    
  41.                 SaveBitmap(bitmap);    
  42.         }   
  43.         //保存到本地   
  44.         public  void  SaveBitmap(Bitmap  bmp)   
  45.         {   
  46.                 Bitmap  bitmap  =  Bitmap.createBitmap(800,  600,  Config.ARGB_8888);        
  47.                 Canvas  canvas  =  new  Canvas(bitmap);    
  48.                 //加载背景图片   
  49.                 Bitmap  bmps  =  BitmapFactory.decodeResource(getResources(),  R.drawable.playerbackground);    
  50.                 canvas.drawBitmap(bmps,  0,  0,  null);    
  51.                 //加载要保存的画面   
  52.                 canvas.drawBitmap(bmp,  10,  100,  null);    
  53.                 //保存全部图层   
  54.                 canvas.save(Canvas.ALL_SAVE_FLAG);    
  55.                 canvas.restore();    
  56.                 //存储路径   
  57.                 File  file  =  new  File("/sdcard/song/");    
  58.                 if(!file.exists())   
  59.                         file.mkdirs();    
  60.                         try  {   
  61.                                 FileOutputStream  fileOutputStream  =  new  FileOutputStream(file.getPath()  +  "/xuanzhuan.jpg");    
  62.                                 bitmap.compress(Bitmap.CompressFormat.JPEG,  100,  fileOutputStream);    
  63.                                 fileOutputStream.close();    
  64.                                 System.out.println("saveBmp  is  here");    
  65.                         }  catch  (Exception  e)  {   
  66.                                                 e.printStackTrace();    
  67.                 }   
  68.         }   
  69. }   
 
 
源代码下载:点击打开链接








    推荐阅读