效果如下图所示

保存在sd卡上的文件为

手机上显示效果为:

1》》在Manifest文件中增加相应权限

    <!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

例如我的Manifest文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.demo.picturetest"android:versionCode="1"android:versionName="1.0" ><!-- 在SDCard中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 往SDCard写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

2》》详细代码如下

package com.demo.picturetest;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.ImageView;public class MainActivity extends Activity {private Bitmap mBitmap;// 画布private Canvas mCanvas;// 画笔--画图片private Paint mPicturePaint = new Paint();// 画笔--写字private Paint mTextPaint = new Paint();// 画笔--写运动数据private Paint mDataPaint = new Paint();private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);drawBitmap();init();// 展示mImageView.setImageBitmap(mBitmap);}private void init() {mImageView = (ImageView) findViewById(R.id.mImageView);}/*** 根据图片和文字生成图片* */private void drawBitmap() {Bitmap bm_bg = BitmapFactory.decodeResource(getResources(),R.drawable.dashboard_bg);// 得到图片的宽、高int width_bg = bm_bg.getWidth();int height_bg = bm_bg.getHeight();// 创建一个你需要尺寸的BitmapmBitmap = Bitmap.createBitmap(width_bg, height_bg, Config.ARGB_8888);// 用这个Bitmap生成一个Canvas,然后canvas就会把内容绘制到上面这个bitmap中mCanvas = new Canvas(mBitmap);// 绘制背景图片mCanvas.drawBitmap(bm_bg, 0.0f, 0.0f, mPicturePaint);// 绘制图片Bitmap bm_head = BitmapFactory.decodeResource(getResources(),R.drawable.share_head_img);// 得到图片的宽、高int width_head = bm_head.getWidth();int height_head = bm_head.getHeight();// 绘制图片--保证其在水平方向居中mCanvas.drawBitmap(bm_head, (width_bg - width_head) / 2, 0.0f,mPicturePaint);// 绘制文字mTextPaint.setColor(Color.WHITE);// 白色画笔mTextPaint.setTextSize(80.0f);// 设置字体大小// 绘制文字mDataPaint.setColor(Color.RED);// 红色画笔mDataPaint.setTextSize(120.0f);// 设置字体大小String distanceTextString = "运动距离:";String distanceDataString = String.valueOf(888);String distanceScalString = "米";float distanceTextString_width = mTextPaint.measureText(distanceTextString, 0, distanceTextString.length());float distanceDataString_width = mDataPaint.measureText(distanceDataString, 0, distanceDataString.length());float distanceScalString_width = mTextPaint.measureText(distanceScalString, 0, distanceScalString.length());float x = (width_bg - distanceTextString_width- distanceDataString_width - distanceScalString_width) / 2;mCanvas.drawText(distanceTextString, x, height_head, mTextPaint);// 绘制文字mCanvas.drawText(distanceDataString, x + distanceTextString_width,height_head, mDataPaint);// 绘制文字mCanvas.drawText(distanceScalString, x + distanceTextString_width+ distanceDataString_width, height_head, mTextPaint);// 绘制文字// 保存绘图为本地图片mCanvas.save(Canvas.ALL_SAVE_FLAG);mCanvas.restore();File file = new File(Environment.getExternalStorageDirectory().getPath() + "/share_pic.png");// 保存到sdcard根目录下,文件名为share_pic.pngLog.i("CXC", Environment.getExternalStorageDirectory().getPath());FileOutputStream fos = null;try {fos = new FileOutputStream(file);mBitmap.compress(Bitmap.CompressFormat.PNG, 50, fos);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

Android 如何将Canvas上绘制的内容保存成本地图片相关推荐

  1. 软件项目技术点(7)——在canvas上绘制自定义图形

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 图形种类 目前我们软件可以绘制出来的形状有如下这几种,作为开发者我们一直想支持用户可以拖拽的类似word里面图形库,但目前还没有找到比 ...

  2. 【HTML5】在canvas上绘制简单的2D图形 (+太极图)

    canvas(画布) canvas 元素是H5中新增的一个重要元素,专门用来绘制图形.在页面中放置一个canvas元素,就相当于在页面上放置一块画布,可以利用 canvas api 在其中进行图形的描 ...

  3. python 下载网页文件_『如何用python把网页上的文本内容保存下来』python爬取网页内容教程...

    python爬虫:如何爬网页数据并将其放在文本 用requests库 r=r.requests.get(url) r.concent 保存到文件里就行了 如何用python把网页上的文本内容保存下来 ...

  4. [OHIF-Viewers]医疗数字阅片-医学影像-querySelector() 选择器语法-将画布(canvas)图像保存成本地图片的方法...

    [OHIF-Viewers]医疗数字阅片-医学影像-querySelector() 选择器语法-将画布(canvas)图像保存成本地图片的方法 将画布(canvas)图像保存成本地图片的方法 使用HT ...

  5. CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)

    CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...

  6. 在图片UIImage上绘制文字(字符串文字转图片)

    很多时候我们需要在一张背景图上面绘制文字并且重新生成一张带有绘制好文字的图片,一开始我使用的是我上篇博客中提到的先自定义一个UIView然后再UIView上面绘制文字,绘制完成之后再通过将UIView ...

  7. Android将Bitmap保存成本地图片

    主要步骤 确定存储路径 获取外部存储权限 确定外部存储状态 确定文件名 保存到文件中 发送广播通知系统扫描保存后的文件 图片的异步保存 本文描述将一个Bitmap对象保存为一个图片文件的主要步骤.保存 ...

  8. 在canvas上绘制3d图形

    项目简介 文章里有相当多的用到中学数学中的知识,推导3d的几何模型是如何绘制到2d平面中去的,最终利用推导出的结论编写代码,实现一个波纹的demo 转载自:https://www.jianshu.co ...

  9. html5画布椭圆,在html5的Canvas上绘制椭圆的几种方法总结

    概述 HTML5中的Canvas并没有直接提供绘制椭圆的方法,下面是对几种绘制方法的总结.各种方法各有优缺,视情况选用.各方法的参数相同: context为Canvas的2D绘图环境对象, x为椭圆中 ...

最新文章

  1. 4-剑指offer: 把数组排成最小的数
  2. itextpdf 生成word显示不全_Word经常遇到这些偏僻小问题,值的收藏
  3. 机器学习实战(一)—— K-近邻算法(KNN)
  4. Leetcode--925. 长按键入
  5. 人工智能将是人类最后的需要 | 大咖来了
  6. android getid,Process.myTid()和Thread.currentThread().getId()区别
  7. HTML CSS JS 特殊字符(转义)表
  8. python随机数生成_Python随机数生成模块random详解
  9. 201521123070 《JAVA程序设计》第8周学习总结
  10. WinForm教程(一)App.config等配置文件
  11. 管理服务之间的依赖关系
  12. 数据库中什么是内联接、左外联接、右外联接?
  13. Ruby读excel写入mysql
  14. 21河海大学计算机838复习经验
  15. 基于pytorch+python实现一个中文到英文的神经网络的翻译模型
  16. VMware虚拟机centos6.5最小化安装以及配置网络
  17. mysql全文查询中文_MySQL-中文全文检索
  18. java模拟转账_事务-模拟银行用户转账
  19. 使用wxParse解析富文本的总结以及解决苹果手机上视频无法播放的方法
  20. 大数据用户画像之基本概念(一)

热门文章

  1. 【90】沟通:跨部门管理
  2. PL/SQL Developer连接本地Oracle 11g 64位数据库和快捷键设置
  3. WebStorm10.0.4 Live Edit与Google浏览器实时无刷新自动加载页面
  4. wpf控件设计时支持(3)
  5. 多操作系统安装实践小结
  6. 不迈出第一步,不去尝试,你永远不知道能否成功
  7. js window.onlload 自遐想
  8. 中国科学院大学2014年数学分析高等代数考研试题
  9. 谷歌对用户搜索加密这一做法对seo的影响!
  10. JS通用窗口拖动函数