1.打开读写SD卡的权限

需要在AndroidManifest.xml加入如下代码:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

第一种方法:

public  void saveBitmap(String bitName, Bitmap mBitmap) {
File f = new File("/sdcard/" + bitName + ".png");
try {
f.createNewFile();
} catch (IOException e) {
Tools.ToastShort("在保存图片时出错:" + e.toString());
}
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}

第二种方法:

1、

public boolean writePngFile(File outFile) { // 将在屏幕上绘制的图形保存到SD卡
boolean resault = false; // 存储标识,false为保存失败
try {
FileOutputStream fos = new FileOutputStream(outFile); // 创建文件输出流(写文件)
if (editBitmap[0].compress(Bitmap.CompressFormat.PNG, 100, fos)) { // 将图片对象按PNG格式压缩(质量100%),写入文件
resault = true; // 存储成功
}
fos.flush(); // 刷新
fos.close();// 关闭流
} catch (Exception e) {
e.printStackTrace();
}
return resault;
}

2、

public void saveBitmap() {
final int fileIndex = getSharedPreferences("bitmapIndex",
Context.MODE_PRIVATE).getInt("index", 0); // 从共享偏好的记录中取出文件流水号,首次从0开始
new AlertDialog.Builder(this).setTitle("提示信息") // 创建并显示提示对话框
.setIcon(android.R.drawable.ic_menu_manage) // 设置图标
.setMessage("保存到SD卡: 钧瓷" + fileIndex + ".png?") // 设置提示信息
.setPositiveButton("确定", new OnClickListener() { // 按下“确定”按钮的处理
public void onClick(DialogInterface dialog,
int which) {
File outFile = new File(Environment
.getExternalStorageDirectory()
.getAbsolutePath()
+ File.separator
+ "钧瓷/钧瓷"
+ fileIndex
+ ".png");// 在SD卡上新建文件
if (MyCanvas.editArea.writePngFile(outFile)) { // 将绘制路径绘制到位图,并压缩保存
getSharedPreferences("bitmapIndex",
Context.MODE_PRIVATE)
.edit()
.putInt("index",
(fileIndex + 1) % 5)
.commit();// 流水号循环递增0~4
Tools.ToastShort("保存成功!");
isSave = false;
if (index == 2) {
ScreenNum = 1;
MyCanvas.menu.creat();
}
}
}
}).setNegativeButton("取消", new OnClickListener() {// 按下“取消”按钮的处理
public void onClick(DialogInterface dialog,
int which) {
isSave = false;
if (index == 2) {
ScreenNum = 1;
MyCanvas.menu.creat();
}
}
}).create().show();
}

【Android】保存Bitmap到SD卡的更多相关文章

  1. [android] 保存文件到SD卡

    /****************2016年5月4日 更新*****************************/ 知乎:为什么很多Android应用要把文件写到/sdcard目录下而不是写到/d ...

  2. android保存文件到SD卡中

    想把文件保存到SD卡中,一定要知道SD卡的路径,有人说可以用File explore来查看,这种方法不太好,因为随着android版本的升级,SD卡的路径可能会发生改变.在1.6的时候SD的路径是/s ...

  3. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  4. Android(java)学习笔记182:保存数据到SD卡 (附加:保存数据到内存)

    1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...

  5. Android(java)学习笔记125:保存数据到SD卡 (附加:保存数据到内存)

    1. 如果我们要想读写数据到SD卡中,首先必须知道SD的路径: File file = new File(Environment.getExternalStorageDirectory()," ...

  6. android 写文件到sd卡问题小记

    android 写文件到sd卡问题小记 事情是这样子的.... 这天我开始编写项目调试工具,高大上不?-----其实就是记录实时网络请求和崩溃日志相关等的小工具(此处一个会心的微笑). 然后我是这样写 ...

  7. Android数据存储之SD卡

    为了更好的存取应用程序的大文件数据,应用程序需要读. 写SD卡上的文件.SD卡大大扩充手机的存储能力. 操作SD首先要加权限: <!--在SDCard中创建与删除文件权限 --> < ...

  8. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

  9. Android之外部存储(SD卡)

    *手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,U盘也行.所有的Android设备都有两个文件存储区域:“内部”和“外部”存储器.这两个名称来自早期的Android,当时大多数设备都提供内 ...

随机推荐

  1. SSM 整合

    --- 分为三层: DAO层:负责与数据源进行交互 Service:业务处理层,也可称为服务层,对上层提供统一接口的服务. Controller: 控制器层,负责处理来自客户端的请求. 通用配置: d ...

  2. ASP.NET C# 获取当前日期 时间 年 月 日 时 分 秒

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...

  3. 关于Cocos2d-x中让主角运动的方法

    比如要让角色跳起来 1.如果是用到物理引擎,那么在物理世界中,可以用 hero->getPhysicsBody()->setVelocity(Vec2(0, 400));  //给主角一个 ...

  4. Oracle过程及函数的参数模式详解

    一.In.out.in out模式 在Oracle中过程与函数都可以有参数,参数的类型可以指定为in.out.in out三种模式. 三种参数的具体说明,如下图所示: (1)in模式 in模式是引用传 ...

  5. Unity5.5+easytouch5双摇杆控制角色移动

    第一步:新建两个Joystick,分别改名LeftJoyStick和RightJoyStick 在LeftJoyStick的ETC Joystick-Axes properties中的Horizont ...

  6. php面向对象(OOP)编程完整教程

    http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html

  7. 【ExtJs】 ExtJs4.2 基本表单组件的使用

    包含ExtJs 基本的组件radioGroup,ComboBox,File,NumberField... <%-- Created by IntelliJ IDEA. User: Adminis ...

  8. C#资源释放及Dispose、Close和析构方法

    https://www.cnblogs.com/luminji/archive/2011/01/05/1926468.html C#资源释放及Dispose.Close和析构方法   备注:此文的部分 ...

  9. mybatis由浅入深day02_2一对一查询_2.3方法二:resultMap_resultType和resultMap实现一对一查询小结

    2.3 方法二:resultMap 使用resultMap,定义专门的resultMap用于映射一对一查询结果. 2.3.1 sql语句 同resultType实现的sql SELECT orders ...

  10. WebService远程调用(代码调用)

    在做多个系统集成的时候,由于各系统厂商采用不同的架构,在项目实施前期,各业务对业务理解不够深入,系统接口可能会有较多变化, 在此背景下,动态调用webserivce就变得灵活了,降低了系统集成的耦合度 ...