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学习笔记之Bitmap位图的旋转
                                这是原图片和旋转后图片

 

                                                                     这是保存到本地的图片800*600 JPG格式

 

具体实现:

  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

  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. }  

源代码下载:点击打开链接

原文地址:https://www.cnblogs.com/Free-Thinker/p/6722145.html