炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述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位图的旋转
这是原图片和旋转后图片
文章图片
文章图片
这是保存到本地的图片800*600 JPG格式
具体实现:
[java] view plain copy
- package xiaosi.bitmap;
- import android.app.Activity;
- import android.os.Bundle;
- public class mianActivity extends Activity
- {
- private BitmapView bitmapView = null;
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- bitmapView = new BitmapView(this);
- setContentView(bitmapView);
- }
- }
BitmapView.Java
[java] view plain copy
- package xiaosi.bitmap;
- import java.io.File;
- import java.io.FileOutputStream;
- import android.content.Context;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.Bitmap.Config;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Matrix;
- import android.view.View;
- public class BitmapView extends View
- {
- private Matrix matrix = null;
- public BitmapView(Context context)
- {
- super(context);
- }
- public void onDraw(Canvas canvas)
- {
- // 获取资源文件的引用res
- Resources res = getResources();
- // 获取图形资源文件
- Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.h);
- // 设置canvas画布背景为白色
- canvas.drawColor(Color.BLACK);
- canvas.drawBitmap(bmp, 0, 0, null);
- // 定义矩阵对象
- matrix = new Matrix();
- //旋转30度
- matrix.postRotate(30);
- Bitmap bitmap = Bitmap.createBitmap(bmp, 0, 50, bmp.getWidth(), bmp.getHeight()/2,
- matrix, true);
- canvas.drawBitmap(bitmap, 0, 250, null);
- SaveBitmap(bitmap);
- }
- //保存到本地
- public void SaveBitmap(Bitmap bmp)
- {
- Bitmap bitmap = Bitmap.createBitmap(800, 600, Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmap);
- //加载背景图片
- Bitmap bmps = BitmapFactory.decodeResource(getResources(), R.drawable.playerbackground);
- canvas.drawBitmap(bmps, 0, 0, null);
- //加载要保存的画面
- canvas.drawBitmap(bmp, 10, 100, null);
- //保存全部图层
- canvas.save(Canvas.ALL_SAVE_FLAG);
- canvas.restore();
- //存储路径
- File file = new File("/sdcard/song/");
- if(!file.exists())
- file.mkdirs();
- try {
- FileOutputStream fileOutputStream = new FileOutputStream(file.getPath() + "/xuanzhuan.jpg");
- bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
- fileOutputStream.close();
- System.out.println("saveBmp is here");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
源代码下载:点击打开链接
推荐阅读
- Android学习笔记进阶19之给图片加边框
- Java中的新特性你真的会用吗()
- Outlook无法启动一直显示“正在启动”的解决方法
- 将Jenkins部署在kubernetes集群中
- #yyds干货盘点#nginx配置
- 文件和目录读写执行权限的区别
- 坦克综合训练模拟器的系统软件方案
- 使用VMware字符界面设置防火墙实验
- 装甲战斗车辆类综合仿真模拟训练系统软件