zoukankan      html  css  js  c++  java
  • Android 如何将Canvas上绘制的内容保存成本地图片(转)

    效果如下图所示

    保存在sd卡上的文件为

    手机上显示效果为:

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

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

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

     1 <?xml version="1.0" encoding="utf-8"?>  
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
     3     package="com.demo.picturetest"  
     4     android:versionCode="1"  
     5     android:versionName="1.0" >  
     6   
     7     <!-- 在SDCard中创建与删除文件权限 -->  
     8     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
     9     <!-- 往SDCard写入数据权限 -->  
    10     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    11   
    12     <uses-sdk  
    13         android:minSdkVersion="8"  
    14         android:targetSdkVersion="19" />  
    15   
    16     <application  
    17         android:allowBackup="true"  
    18         android:icon="@drawable/ic_launcher"  
    19         android:label="@string/app_name"  
    20         android:theme="@style/AppTheme" >  
    21         <activity  
    22             android:name=".MainActivity"  
    23             android:label="@string/app_name" >  
    24             <intent-filter>  
    25                 <action android:name="android.intent.action.MAIN" />  
    26   
    27                 <category android:name="android.intent.category.LAUNCHER" />  
    28             </intent-filter>  
    29         </activity>  
    30     </application>  
    31   
    32 </manifest>  

    2》》详细代码如下

      1 package com.demo.picturetest;  
      2   
      3 import java.io.File;  
      4 import java.io.FileNotFoundException;  
      5 import java.io.FileOutputStream;  
      6 import java.io.IOException;  
      7   
      8 import android.app.Activity;  
      9 import android.graphics.Bitmap;  
     10 import android.graphics.Bitmap.Config;  
     11 import android.graphics.BitmapFactory;  
     12 import android.graphics.Canvas;  
     13 import android.graphics.Color;  
     14 import android.graphics.Paint;  
     15 import android.os.Bundle;  
     16 import android.os.Environment;  
     17 import android.util.Log;  
     18 import android.widget.ImageView;  
     19   
     20 public class MainActivity extends Activity {  
     21     private Bitmap mBitmap;  
     22     // 画布  
     23     private Canvas mCanvas;  
     24     // 画笔--画图片  
     25     private Paint mPicturePaint = new Paint();  
     26     // 画笔--写字  
     27     private Paint mTextPaint = new Paint();  
     28     // 画笔--写运动数据  
     29     private Paint mDataPaint = new Paint();  
     30   
     31     private ImageView mImageView;  
     32   
     33     @Override  
     34     protected void onCreate(Bundle savedInstanceState) {  
     35         super.onCreate(savedInstanceState);  
     36         setContentView(R.layout.activity_main);  
     37         drawBitmap();  
     38         init();  
     39         // 展示  
     40         mImageView.setImageBitmap(mBitmap);  
     41   
     42     }  
     43   
     44     private void init() {  
     45         mImageView = (ImageView) findViewById(R.id.mImageView);  
     46     }  
     47   
     48     /**  
     49      * 根据图片和文字生成图片  
     50      * */  
     51     private void drawBitmap() {  
     52   
     53         Bitmap bm_bg = BitmapFactory.decodeResource(getResources(),  
     54                 R.drawable.dashboard_bg);  
     55         // 得到图片的宽、高  
     56         int width_bg = bm_bg.getWidth();  
     57         int height_bg = bm_bg.getHeight();  
     58   
     59         // 创建一个你需要尺寸的Bitmap  
     60         mBitmap = Bitmap.createBitmap(width_bg, height_bg, Config.ARGB_8888);  
     61         // 用这个Bitmap生成一个Canvas,然后canvas就会把内容绘制到上面这个bitmap中  
     62         mCanvas = new Canvas(mBitmap);  
     63   
     64         // 绘制背景图片  
     65         mCanvas.drawBitmap(bm_bg, 0.0f, 0.0f, mPicturePaint);  
     66         // 绘制图片  
     67         Bitmap bm_head = BitmapFactory.decodeResource(getResources(),  
     68                 R.drawable.share_head_img);  
     69   
     70         // 得到图片的宽、高  
     71         int width_head = bm_head.getWidth();  
     72         int height_head = bm_head.getHeight();  
     73         // 绘制图片--保证其在水平方向居中  
     74         mCanvas.drawBitmap(bm_head, (width_bg - width_head) / 2, 0.0f,  
     75                 mPicturePaint);  
     76   
     77         // 绘制文字  
     78         mTextPaint.setColor(Color.WHITE);// 白色画笔  
     79         mTextPaint.setTextSize(80.0f);// 设置字体大小  
     80   
     81         // 绘制文字  
     82         mDataPaint.setColor(Color.RED);// 红色画笔  
     83         mDataPaint.setTextSize(120.0f);// 设置字体大小  
     84   
     85         String distanceTextString = "运动距离:";  
     86         String distanceDataString = String.valueOf(888);  
     87         String distanceScalString = "米";  
     88   
     89         float distanceTextString_width = mTextPaint.measureText(  
     90                 distanceTextString, 0, distanceTextString.length());  
     91   
     92         float distanceDataString_width = mDataPaint.measureText(  
     93                 distanceDataString, 0, distanceDataString.length());  
     94         float distanceScalString_width = mTextPaint.measureText(  
     95                 distanceScalString, 0, distanceScalString.length());  
     96         float x = (width_bg - distanceTextString_width  
     97                 - distanceDataString_width - distanceScalString_width) / 2;  
     98   
     99         mCanvas.drawText(distanceTextString, x, height_head, mTextPaint);// 绘制文字  
    100         mCanvas.drawText(distanceDataString, x + distanceTextString_width,  
    101                 height_head, mDataPaint);// 绘制文字  
    102   
    103         mCanvas.drawText(distanceScalString, x + distanceTextString_width  
    104                 + distanceDataString_width, height_head, mTextPaint);// 绘制文字  
    105   
    106         // 保存绘图为本地图片  
    107         mCanvas.save(Canvas.ALL_SAVE_FLAG);  
    108         mCanvas.restore();  
    109   
    110         File file = new File(Environment.getExternalStorageDirectory()  
    111                 .getPath() + "/share_pic.png");// 保存到sdcard根目录下,文件名为share_pic.png  
    112         Log.i("CXC", Environment.getExternalStorageDirectory().getPath());  
    113         FileOutputStream fos = null;  
    114         try {  
    115             fos = new FileOutputStream(file);  
    116             mBitmap.compress(Bitmap.CompressFormat.PNG, 50, fos);  
    117   
    118         } catch (FileNotFoundException e) {  
    119             // TODO Auto-generated catch block  
    120             e.printStackTrace();  
    121         }  
    122         try {  
    123             fos.close();  
    124         } catch (IOException e) {  
    125             // TODO Auto-generated catch block  
    126             e.printStackTrace();  
    127         }  
    128   
    129     }  
    130 }  

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

  • 相关阅读:
    装机软件
    关于软件开发
    Jquery中ajax基本语法
    jQuery+Ajax+PHP滚动加载
    ajax无刷新分页
    PHPExcel数据导出到Excel文件
    Linux下启动,停止,重启Nginx、Mysql、PHP
    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication.
    linux系统给普通用户添加sudo权限
    Linux下全局安装composer方法
  • 原文地址:https://www.cnblogs.com/zl1991/p/8205329.html
Copyright © 2011-2022 走看看