Android(安卓)调用系统相机并加时间水印
16lz
2021-01-24
调用系统相机:
/*** * 启动拍照 */private void capture(){Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 获取文件 File file=new File(tempPicPath); //拍照后原图回存入此路径下 intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(file)); startActivityForResult(intent, 1); }
private String tempPicPath = "/mnt/sdcard/temp.jpg" ;
拍照完成之后的图片保存在sdcard中的temp.jpg,这个图片是没有水印的。
拍照回调时将图片生成bitmap,可以使用bitmap来添加水印:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//调用拍照之后返回的信息 if (resultCode == Activity.RESULT_OK) { // Toast.makeText(this, "拍照成功", Toast.LENGTH_LONG).show(); bm = BitmapFactory.decodeFile(tempPicPath) ;
createDialog() ; }else{// Toast.makeText(this, "拍照不成功", Toast.LENGTH_LONG).show(); }}
其中:
//弹出对话框,是否保存图片private void createDialog(){Builder builder = new Builder(this) ;builder.setTitle("请输入图片名称") ;View view = LayoutInflater.from(this).inflate(R.layout.dialog_save_pic, null) ;editFileName = (EditText) view.findViewById(R.id.editText_pic_name) ;btnSave = (Button) view.findViewById(R.id.button_save) ;btnCancel = (Button) view.findViewById(R.id.button_cancel) ;builder.setView(view) ;btnSave.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String name = editFileName.getText().toString().trim() ;if(name != null && name.length() > 0){//保存图片savePic(name) ;Toast.makeText(getApplicationContext(), "保存成功", 0).show() ;dialog.dismiss() ;}else{Toast.makeText(getApplicationContext(), "请输入图片名称后,再保存", 0).show() ;}}}) ;
/** * 保存图片 * @param name */private void savePic(String name){File rootFile = new File(MConstent.unuploadPicDir) ;if(!rootFile.exists()){rootFile.mkdirs() ;}File file = new File(MConstent.unuploadPicDir + "/" + name + ".jpg") ;try {FileOutputStream fos = new FileOutputStream(file) ;//FileInputStream fis = new FileInputStream(new File(tempPicPath)) ;byte[] temp = new byte[1024] ;//添加时间水印Bitmap newbm = addTimeFlag(bm) ;newbm.compress(Bitmap.CompressFormat.JPEG, 100, fos);// 把数据写入文件 fos.flush() ;fos.close() ;} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 添加时间水印 * @param bm */private Bitmap addTimeFlag(Bitmap src){ // 获取原始图片与水印图片的宽与高 int w = src.getWidth(); int h = src.getHeight(); Bitmap newBitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas mCanvas = new Canvas(newBitmap); // 往位图中开始画入src原始图片 mCanvas.drawBitmap(src, 0, 0, null); //添加文字 Paint textPaint = new Paint(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String time = sdf.format(new Date(System.currentTimeMillis())); textPaint.setColor(Color.RED) ; textPaint.setTextSize(100); String familyName = "宋体"; // Typeface typeface = Typeface.create(familyName, // Typeface.BOLD_ITALIC); // textPaint.setTypeface(typeface); // textPaint.setTextAlign(Align.CENTER); mCanvas.drawText(time, (float)(w*1)/7, (float)(h*14)/15, textPaint); mCanvas.save(Canvas.ALL_SAVE_FLAG); mCanvas.restore(); return newBitmap ;}
更多相关文章
- Android有效解决加载大图片内存溢出问题及优化虚拟机内存
- android在处理一写图片资源的时候,会进行一些类型的转换,现在有空
- android 将图片通过base64转换为String 将图片String转换为Bitma
- 背景图片显示问题 图片显示错误 android开发
- Android(安卓)从缓存中读取图片并异步加载的类[转]
- Android学习之路四:ImageView
- button imageButton 背景透明
- Android(安卓)Shader应用开发之雷达扫描效果
- Android(安卓)图片的加载与保存