效果如下图所示

保存在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-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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; @Override
protected 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(); // 创建一个你需要尺寸的Bitmap
mBitmap = 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.png
Log.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 block
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}

转自:http://blog.csdn.net/cxc19890214/article/details/39924951

Android 如何将Canvas上绘制的内容保存成本地图片(转)的更多相关文章

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

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

  2. Canvas上绘制几何图形

    重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形,等各种形状 ...

  3. Android开发 ---从互联网上下载文件,回调函数,图片压缩、倒转

     Android开发 ---从互联网上下载文件,回调函数,图片压缩.倒转 效果图: 描述: 当点击“下载网络图像”按钮时,系统会将图二中的照片在互联网上找到,并显示在图像框中 注意:这个例子并没有将图 ...

  4. PHP《将画布(canvas)图像保存成本地图片的方法》

    用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审 ...

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

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

  6. Android自定义控件7--自定义开关--绘制界面内容

    本文实现全自定义控件--自定义开关 本文地址:http://www.cnblogs.com/wuyudong/p/5922316.html,转载请注明源地址. 自定义开关 (View),本文完成下面内 ...

  7. 在<canvas>上绘制img(drawImage())时需要注意的事

    <canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...

  8. 前端使用html2canvas截图,在canvas上绘制图片及保存图片

    1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...

  9. 软件项目技术点(5)——在canvas上绘制动态网格线

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...

随机推荐

  1. GDB高级用法

    http://blog.csdn.net/wwwsq/article/details/7086151

  2. 模拟登陆CSDN——就是这么简单

    工具介绍 本篇文章主要是解说怎样模拟登陆CSDN.使用的工具是HttpClient+Jsoup 当中HttpClient主要是负责发送请求,而Jsoup主要是解析HTML 你可能对HttpClient ...

  3. .Net高级技术——IDisposable

    IDisposable概述 GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接.文件句柄.Socket连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员自己控 ...

  4. html 中怎么设置div的位置

    利用CSS的position属性对元素定位,以下是position 属性规定元素的定位类型. absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位.元素的位置通过 ...

  5. java表格 JTable实例 (带滚动条,内嵌选择框)

    import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.JScrollPa ...

  6. vc 获得调用者的模块名称

    void ShowCallerModuleName(void* calleraddr ){ HMODULE hCallerModule = NULL; TCHAR szModuleName[MAX_P ...

  7. my.cnf 配置文件参数解释

    my.cnf 配置文件参数解释: #*** client options 相关选项 ***# #以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如果你 ...

  8. HBase目录

    1. HBase介绍及简易安装(转) 2. java操作Hbase实例 3. HBase入门基础教程之单机模式与伪分布式模式安装(转) 4. HBase教程 5. 用Java操纵HBase数据库(新建 ...

  9. 第七章 JVM性能监控与故障处理工具(1)

    1.定位系统问题 依据 GC日志 堆转储快照(heapdump/hprof文件) 线程快照(threaddump/javacore文件) 运行日志 异常堆栈 分析依据的工具 jps:显示指定系统内的所 ...

  10. 系统运维技巧(三)——利用dd命令临时增加交换分区

    有时会遇到内存不够用的情况,可以使用本文提供的方法进行临时增加交换分区. #制作交换分区——得到文件 [root@serv01 linux-2.6.38]# dd if=/dev/zero of=/s ...