本篇博客是承接上一篇Android 绘图进阶(二):Xfermode绘制涂层博客继续写进行的。在上次的内容中我们事先了一种涂层的效果,可以使用手指滑动,显露底层的背景图片,如果绘制的图片我们想要进行保存,就好像我们平时上传图片,将不想被别人看到的信息进行马赛克,之后需要进行图片的保存再上传到网络上面,那么我们要怎样实现呢?
首先在布局中添加一个Button用于保存图片,之后我们通过对Button按钮的点击事件进行监听,创建一个file(使用系统时间作为文件名),通过Bitmap的compress方法将图片进行压缩保存。
下面具体来看一下代码:
public class MainActivity_bitmap2 extends Activity implements OnClickListener{
private Button mbtn_bitmap2;
private MyBitmapView2 bitmap2;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bitmap_view2);
mbtn_bitmap2=(Button) findViewById(R.id.btn_bitmapview2);
bitmap2=(MyBitmapView2) findViewById(R.id.bitmap2);
mbtn_bitmap2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//创建输出文件
File file=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
//不进行刷新的话,如果连续点击两次按钮,两次保存的图片会一样
bitmap2.invalidate();
//想要保存图片,必须设置setDrawingCacheEnabled使能
bitmap2.setDrawingCacheEnabled(true);
//创建输出的Bitmap,用于存放
Bitmap bitmapnew=bitmap2.getDrawingCache();
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
Log.d("路径", file.getAbsolutePath());
//通过compress将图片压缩,并放入file流中
//参数100指的是不进行压缩,压缩率为0,如果参数为30,则30 是压缩率,表示压缩70%
bitmapnew.compress(CompressFormat.JPEG,100, new FileOutputStream(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后不要忘记添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
效果图:
上图中我们可以看到在sdcard中我们可以找到以时间为文件名的图片。