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(); }