启动相机,将相机拍到的图片弄成圆的,也就是头像
来源:互联网 发布:写软文 知乎 编辑:程序博客网 时间:2024/04/28 06:39
启动相机,将相机拍到的图片弄成圆的,也就是头像
这是笔记点击打开链接,视频为:点击打开链接
case R.id.editsource_camera://点击某个按钮时启动相机 //启动相机 intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//启动隐示意图 startActivityForResult(intent, REQUEST_CAMERA);//REQUEST_CAMERA---接收的<pre name="code" class="java"><span style="white-space:pre"></span>break;
case R.id.editsource_avatar: //启动隐式意图打开图库 intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, REQUEST_PIC); break;
以下是详细方法
按着onActivityResult顺序下去看
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CAMERA: if (resultCode == RESULT_OK) { //获取相片 Bitmap bitmap = data.getExtras().getParcelable("data"); //将图片保存,然后获取uri Uri saveUri = saveBitmap(bitmap); if (saveUri != null) { startZoom(saveUri); } } break; case REQUEST_PIC: if (resultCode == RESULT_OK) { Uri imageUri = data.getData(); //启动剪裁 startZoom(imageUri); Log.d(TAG, "onActivityResult: " + imageUri); } break; case REQUEST_CROP: //接收剪裁后的图片 if (resultCode == RESULT_OK) { Bitmap cropBitmap = data.getExtras().getParcelable("data"); //将图片绘制为圆形 Bitmap circleBitmap = drawCircleBitmap(cropBitmap); Log.d(TAG, "onActivityResult: " + (circleBitmap == null)); if (circleBitmap == null) { mEditsourceAvatar.setImageResource(R.mipmap.icon_register_avatar_default); } else { //设置图片 mEditsourceAvatar.setImageBitmap(circleBitmap); } } break; } super.onActivityResult(requestCode, resultCode, data); }
/** * 将图片绘制为圆形 // 绘制的是白色 */ private Bitmap drawCircleBitmap(Bitmap cropBitmap) { int width = cropBitmap.getWidth(); int height = cropBitmap.getHeight(); //创建空的bitmap Bitmap circleBitmap = Bitmap.createBitmap(cropBitmap.getWidth(), cropBitmap.getHeight(), Bitmap.Config.ARGB_8888); //画布 Canvas canvas = new Canvas(circleBitmap); Rect rect = new Rect(0, 0, cropBitmap.getWidth(), cropBitmap.getHeight()); //获取半径 int radius = 0; if (width > height) { radius = cropBitmap.getHeight() / 2; } else { radius = cropBitmap.getWidth() / 2; } Paint paint = new Paint(); paint.setColor(0xff424242); //抗锯齿 paint.setAntiAlias(true); //设置防抖动 paint.setDither(true); paint.setFilterBitmap(true); // 画布,不是画笔 paint 注意 canvas.drawARGB(0, 0, 0, 0); //创建矩形 canvas.drawCircle(cropBitmap.getWidth() / 2, cropBitmap.getHeight() / 2, radius, paint); //设置取绘制的图层的交集,上面一层的图像 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(cropBitmap, rect, rect, paint); Log.d(TAG, "drawCircleBitmap: " + width + ".." + height + ".." + radius); //绘制一个边框 Paint paint2 = new Paint(); paint2.setColor(Color.DKGRAY); paint2.setAntiAlias(true); paint2.setDither(true); paint2.setStyle(Paint.Style.STROKE); paint2.setStrokeWidth(6); canvas.drawCircle(cropBitmap.getWidth() / 2, cropBitmap.getHeight() / 2, cropBitmap.getWidth() / 2 - 3, paint2); return circleBitmap; }
/** * 保存图片 * * @param bitmap * @return */ private Uri saveBitmap(Bitmap bitmap) { FileOutputStream fos = null; File file = new File(MyApplication.MATCHBOX_FILE_PATH + "avater.png"); try { fos = new FileOutputStream(MyApplication.MATCHBOX_FILE_PATH + "avater.png"); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); return Uri.fromFile(file); } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }
/** * 启动相机剪裁功能 * * @param uri */ private void startZoom(Uri uri) { //构建启动剪裁意图 Intent intent = new Intent("com.android.camera.action.CROP"); //设置沪深据uri,和类型为图片 intent.setDataAndType(uri, "image/*"); //显示view为可剪裁 intent.putExtra("crop", true); //设置剪裁的宽高比1:1 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); //设置宽高 intent.putExtra("outputX", 150); intent.putExtra("outputY", 150); //设置剪裁后数据,通过intent返回 intent.putExtra("return-data", true); startActivityForResult(intent, REQUEST_CROP); }}//上面可能会报错,是这个问题。在MyApplication中加入就行,因为要跟系统同事启动,所以要放到主程序入口
/** * 文件保存路径 */public static final String MATCHBOX_FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MatchBox/";
0 0
- 启动相机,将相机拍到的图片弄成圆的,也就是头像
- 将相机/相册的图片保存到本地沙盒
- iOS 相机调用相册打开及图片头像的上传到服务器详解
- android圆形头像:相机相册加载图片到圆形头像
- 关于图片的等比缩放,从相机和照片选取头像,显示圆形头像
- Unity 将相机里看到的 显示到 Image上
- 相机的连拍和水印的功能
- 获取手机图片或者打开相机拍照作为头像的案例
- (ContinuousShot)长按相机连拍,没有达到最大的连拍数量
- iOS调用系统相册,相机上传头像的基本技巧
- 打开相机,并返回没有被压缩的图片,并且将图片保存在相册中
- iOS 旋转图片 将相机拍摄的横屏图片旋转成竖屏
- Android 图片的裁剪与相机调用
- 调用相机相册图片的方法
- 相机照相以及处理图片的压缩
- Android相机和本地图片的调用
- 关于OpenGL ES 2.0中 相机视觉,也就是Matrix.setLookAtM()参数的详细解说
- 设置一个Plane到相机的viewport
- Docker命令
- Python使用post及get方式提交数据
- 读书笔记之《No-SQL精粹》
- 从这里开始
- java面试必备:排序算法之冒泡、选择排序
- 启动相机,将相机拍到的图片弄成圆的,也就是头像
- [ 备战NOIP2016 ] 动态规划基本模型
- Android电量测试工具battery-historian学习小记
- Codeforces Round #377 (Div. 2) C. Sanatorium
- 关于javaweb开发相关配置博客
- 树形dp:选课
- 第八周【项目五 计数的模式匹配】
- 共同学习Java源代码--数据结构--LinkedList类(六)
- ZIP压缩算法详细分析及解压实例解释