启动相机,将相机拍到的图片弄成圆的,也就是头像

来源:互联网 发布:写软文 知乎 编辑:程序博客网 时间: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
原创粉丝点击