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. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class mianActivity extends Activity
  5. {
  6. private BitmapView bitmapView = null;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState)
  9. {
  10. super.onCreate(savedInstanceState);
  11. bitmapView = new BitmapView(this);
  12. setContentView(bitmapView);
  13. }
  14. }

BitmapView.Java

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

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

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

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

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  2. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  3. Android学习笔记进阶17之LinearGradient

    具体的看一下博文:Android学习笔记进阶15之Shader渲染 package xiaosi.BitmapShader; import android.app.Activity; import a ...

  4. Android学习笔记进阶16之BitmapShader

    <1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode ti ...

  5. Android 学习笔记进阶十二之裁截图片

    package xiaosi.cut; import java.io.File; import android.app.Activity; import android.content.Intent; ...

  6. Android 学习笔记进阶14之像素操作

    在我们玩的游戏中我们会经常见到一些图像的特效,比如半透明等效果.要实现这种半透明效果其实并不难,需要我们懂得图像像素的操作. 不要怕,其实在Android中Bitmap为我们提供了操作像素的基本方法. ...

  7. Android学习笔记进阶19 之给图片加边框

    //设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width ...

  8. Android学习笔记进阶20 之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  9. Android学习笔记进阶21之设置壁纸

    别忘记在ApplicationManifest.xml 中加上权限的设置. <uses-permission Android:name = "android.permission.SE ...

随机推荐

  1. 【Henu ACM Round#19 C】 Developing Skills

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 优先把不是10的倍数的变成10的倍数. (优先%10比较大的数字增加 如果k还有剩余. 剩下的数字都是10的倍数了. 那么先加哪一个 ...

  2. 洛谷 P1769 淘汰赛制_NOI导刊2010提高(01)

    P1769 淘汰赛制_NOI导刊2010提高(01) 题目描述 淘汰赛制是一种极其残酷的比赛制度.2n名选手分别标号1,2,3,…,2^n-1,2^n,他们将要参加n轮的激烈角逐.每一轮中,将所有参加 ...

  3. [Python] Array Attributes of Numpy lib

    Attributes of numpy.ndarray: numpy.ndarray.shape: Dimensions (height, width, ...) numpy.ndarray.ndim ...

  4. mysql查询今天,昨天,近7天,近30天,本月,上一月数据

    近期项目中用到了查询当月数据记录的功能,最初的想法是在逻辑业务里构造好时间段进行查询,当写sql语句时感觉挺麻烦.所以就到网上搜索了一下,看看是不是能有简单的方法.果然.网络资源非常强大.以下结合我的 ...

  5. 找出一堆数中最小的前K个数

    描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然 ...

  6. 在Qt 4.4中,Alien Widget诞生了(Window负责与窗口系统的联系。Alien被号称是所有闪烁的终结者)

    2011年09月29日 23:47:46 阅读数:7269 Qt 4.0 automatically double-buffers Qt 4.1 QWidget::autoFillBackground ...

  7. HDU 4572 Bottles Arrangement

    具体的证明:点击打开链接 我的想法: 要想保证题目所说 构造最小行的和,仅仅能是这样的情况 .....      m-3  m-2  m-1  m    |   m  m-1  m-2  m-3   ...

  8. CentOS用rpm升级glibc

    CentOS用rpm升级glibc #! /bin/sh # update glibc to 2.23 for CentOS 6 wget http://cbs.centos.org/kojifile ...

  9. DDR工作原理

    DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”.DDR SDRAM在原有的SDRAM的基础上改进而来.也正因为如此,DDR能够凭借着转产成本优势 ...

  10. 【实用篇】Android之应用程序实现自动更新功能

    我个人用的是友盟提供的自动更新组件,因此在这里只描述如何实用友盟提供的组件来完成程序的自动更新,步骤如下: 1.登录友盟官网,点击注册一个友盟账号. 2.注册成功后将会自动进入到添加新应用界面,选择添 ...