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格式
具体实现:
- 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
- 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学习笔记进阶18之画图并保存图片到本地的更多相关文章
- Android学习笔记进阶18 之画图并保存图片到本地
1.首先创建一个Bitmap图片,并指定大小: 2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可: 3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...
- Android学习笔记进阶之在图片上涂鸦(能清屏)
Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...
- Android学习笔记进阶17之LinearGradient
具体的看一下博文:Android学习笔记进阶15之Shader渲染 package xiaosi.BitmapShader; import android.app.Activity; import a ...
- Android学习笔记进阶16之BitmapShader
<1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public BitmapShader(Bitmap bitmap,Shader.TileMode ti ...
- Android 学习笔记进阶十二之裁截图片
package xiaosi.cut; import java.io.File; import android.app.Activity; import android.content.Intent; ...
- Android 学习笔记进阶14之像素操作
在我们玩的游戏中我们会经常见到一些图像的特效,比如半透明等效果.要实现这种半透明效果其实并不难,需要我们懂得图像像素的操作. 不要怕,其实在Android中Bitmap为我们提供了操作像素的基本方法. ...
- Android学习笔记进阶19 之给图片加边框
//设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width ...
- Android学习笔记进阶20 之得到图片的缩略图
<1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...
- Android学习笔记进阶21之设置壁纸
别忘记在ApplicationManifest.xml 中加上权限的设置. <uses-permission Android:name = "android.permission.SE ...
随机推荐
- arcgis engine 获取高亮Feature、element
转自原文 arcgis engine 获取高亮Feature.element IGraphicsContainer pGraphicsC = mainAxMapControl.Map as IGra ...
- [Recompose] Pass a React Prop to a Stream in RxJS
When you declare your Component and Props in JSX, you can pass those props along to your RxJS stream ...
- java反射机制剖析(二)— Class Loader
上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...
- FSM之三--代码风格
FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html Moore型状态机与mealy型状态机相比,由于其状态输 ...
- FPGA设计中的电源管理(转载)
过去,FPGA设计者主要关心时序和面积使用率问题.但随着FPGA不断取代ASSP和ASIC器件,设计者们现正期望能够开发低功耗设计,在设计流程早期就能对功耗进行正确估算,以及管理和对与FPGA相关的各 ...
- jQuery插件开发初探
最简单的插件 $.fn.changeStyle = function (colorStr) { $(this).css('color',colorStr); } 应用如下: <!DOCTYPE ...
- HDU 5889 Barricade (Dijkstra+Dinic)
思路: 首先 先Dijkstra一遍 找出来最短路 不是最短路上的边都不要 然后呢 套个Dinic模板就好了-- 求个最小割 输出 大功告成~~ //By SiriusRen #include < ...
- 整个shuffle的流程图
整个shuffle的流程图 Paste_Image.png Map Shuffle的作用以及相应的设置 partition 过程:输入的<key,value>对经过map()处理后输出 ...
- SSH—指定登录的IP
设置ssh安全--指定的IP登陆 为了服务器更加具有安全性,我们可以设置ssh安全只允许用户从固定的IP进行登陆, 首先获取要登录服务器的电脑的IP地址 登录http://www.ip138.com/ ...
- Linux学习总结(6)——CenterOS7安装mysql5.5的方法
首先centos7 已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb,以下为卸载mariadb,安 ...