android手写缓存图片工具,android项目 之 记事本(15) ----- 保存手写及绘图

这篇博客介绍了如何在Android应用中保存手写和绘图内容到SD卡。通过将画布内容保存为Bitmap,然后利用Bitmap的compress方法将其以PNG格式写入指定文件,实现了绘图的保存。对于手写内容,通过启用EditText的绘图缓存,将其转换为Bitmap后再进行保存。保存文件的函数返回图片路径,以便于将内容存储到数据库中。
摘要由CSDN通过智能技术生成

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog..net/jesson20121020

之前,忘了写如何将手写和绘图保存,现在补上。

首先看如何保存绘图,先看效果图:

07b6c7c420a6a1f9bed78c3832d9ea14.png

790e19bf0ca9fc124a57f36b26e6188c.png

因为记事本的绘图功能主要用到了画布,而在构建画布时,指定了Bitmap,也就是说在画布上的所画的东西都被保存在了Bitmap中,因此,我们只要保存该Bitmap,就可以将我们的所绘制的图形以图片的形式保存,主要代码如下:

/*

* 保存所绘图形

* 返回绘图文件的存储路径

* */

public String saveBitmap(){

//获得系统当前时间,并以该时间作为文件名

SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss");

Date curDate = new Date(System.currentTimeMillis());//获取当前时间

String str = formatter.format(curDate);

String paintPath = "";

str = str + "paint.png";

File dir = new File("/sdcard/notes/");

File file = new File("/sdcard/notes/",str);

if (!dir.exists()) {

dir.mkdir();

}

else{

if(file.exists()){

file.delete();

}

}

try {

FileOutputStream out = new FileOutputStream(file);

mBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

//保存绘图文件路径

paintPath = "/sdcard/notes/" + str;

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return paintPath;

}

这里的mBitmap就是保存画布内容的,我们将其存储在SD卡的指定目录下,并以时间作为文件名,最后返回存储该绘图文件的路径,用于将其存储到数据库中。

再看,如何保存手写:

ef80fb7a4e02392fa7019362f5a4a53a.png

9c7825e9d0281c10ac842231b18f4800.png

和保存绘图一样,这里同样是以图片的形式保存在SD卡的指定目录下,但是这里有个问题,手写Activity用的是帧式布局,下层是自定义的EditText,上层同样是自定的View,用于绘图,而我们的手写最终是保存在自定义的EditText中的,当然可以用文本的形式保存手写内容,但这里为了简单起见,以及为了保存手写的颜色大小等属性,故以图片的形式保存。

因为自定义的EditText说到底还是View,所以这里就需要将View转换成图片,代码如下:

//将view转换成图片

et_handwrite.setDrawingCacheEnabled(true);

Bitmap cutHandwriteBitmap = Bitmap.createBitmap(et_handwrite.getDrawingCache());

et_handwrite.setDrawingCacheEnabled(false);

这样,我们就将手写的内容保存在了Bitmap中,之后,我们就可以用保存绘图的方法将其保存,如下:

......

class ClickEvent implements OnClickListener{

@Override

public void onClick(View v) {

if(v == btn_save){

//得到调用该Activity的Intent对象

Intent intent = getIntent();

Bundle b = new Bundle();

String path = saveBitmap();

b.putString("handwritePath", path);

intent.putExtras(b);

setResult(RESULT_OK, intent);

HandWriteActivity.this.finish();

}

else if(v == btn_back){

HandWriteActivity.this.finish();

}

}

}

......

//保存手写文件

public String saveBitmap(){

//获得系统当前时间,并以该时间作为文件名

SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss");

Date curDate = new Date(System.currentTimeMillis());//获取当前时间

String str = formatter.format(curDate);

String paintPath = "";

str = str + "write.png";

File dir = new File("/sdcard/notes/");

File file = new File("/sdcard/notes/",str);

if (!dir.exists()) {

dir.mkdir();

}

else{

if(file.exists()){

file.delete();

}

}

//将view转换成图片

et_handwrite.setDrawingCacheEnabled(true);

Bitmap cutHandwriteBitmap = Bitmap.createBitmap(et_handwrite.getDrawingCache());

et_handwrite.setDrawingCacheEnabled(false);

try {

//保存绘图文件路径

paintPath = "/sdcard/notes/" + str;

FileOutputStream out = new FileOutputStream(file);

cutHandwriteBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);

out.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return paintPath;

}

至此,我们就实现了将记事本中添加的图片及手写文件保存在指定目录,并以当前时间作为文件名,这里保存文件的函数返回的是图片的路径,这是为了将记事本中的内容存储到数据库中时,只将绘图及手写的存储路径保存,而不是将整个绘图或手写保存在数据库中,这些内容,之前已有介绍,不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值