Android摄像头意图作物 [英] Android Camera Intent with Crop

查看:106
本文介绍了Android摄像头意图作物的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在试图裁剪和调整图像大小,同时通过摄像头的意图拍摄照片,但不明白我在做什么错在这里 - 不能得到裁剪后的图像数据,即使该文件是正确的保存在手机上。

I've been trying to crop and resize an image while taking a picture through the camera intent but don't understand what I'm doing wrong here -- can't get the cropped image data even if the file is correctly saved on the phone.

...
public class Add extends Activity {
    private String imageFilePath;
    ...
    protected void onCreate(Bundle savedInstanceState) {
    ...
        imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/" + String.valueOf(System.currentTimeMillis()) + ".jpg";
        imageFile = new File(imageFilePath);
        imageFileUri = Uri.fromFile(imageFile);
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);
        intent.putExtra("crop", "true");
        intent.putExtra("outputX", 600);
        intent.putExtra("outputY", 600);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true); 
        startActivityForResult(intent, 0);
        ...
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) {
        case 0 : {    
        Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath);
    }
    }
}

如果我用 intent.putExtra(裁剪,真); imageFilePath 返回null,如果不是它返回正确的文件。

If I use intent.putExtra("crop", "true");, imageFilePath returns null, if not it returns the correct file.

感谢您的帮助!

推荐答案

试一试::

private void doCrop() {
    final ArrayList<CropOption> cropOptions = new ArrayList<CropOption>();

    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getPackageManager().queryIntentActivities(
            intent, 0);

    int size = list.size();

    if (size == 0) {
        Toast.makeText(this, "Can not find image crop app",
                Toast.LENGTH_SHORT).show();

        return;
    } else {
        intent.setData(mImageCaptureUri);

        /*
         * intent.putExtra("outputX", 200); intent.putExtra("outputY", 200);
         */

        intent.putExtra("outputX", int_Height_crop);
        intent.putExtra("outputY", int_Width_crop);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("scale", true);
        intent.putExtra("return-data", true);

        if (size == 1) {
            Intent i = new Intent(intent);
            ResolveInfo res = list.get(0);

            i.setComponent(new ComponentName(res.activityInfo.packageName,
                    res.activityInfo.name));

            startActivityForResult(i, CROP_FROM_CAMERA);
        } else {
            for (ResolveInfo res : list) {
                final CropOption co = new CropOption();

                co.title = getPackageManager().getApplicationLabel(
                        res.activityInfo.applicationInfo);
                co.icon = getPackageManager().getApplicationIcon(
                        res.activityInfo.applicationInfo);
                co.appIntent = new Intent(intent);

                co.appIntent
                        .setComponent(new ComponentName(
                                res.activityInfo.packageName,
                                res.activityInfo.name));

                cropOptions.add(co);
            }

            CropOptionAdapter adapter = new CropOptionAdapter(
                    getApplicationContext(), cropOptions);

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose Crop App");
            builder.setAdapter(adapter,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                            startActivityForResult(
                                    cropOptions.get(item).appIntent,
                                    CROP_FROM_CAMERA);
                        }
                    });

            builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {

                    if (mImageCaptureUri != null) {
                        getContentResolver().delete(mImageCaptureUri, null,
                                null);
                        mImageCaptureUri = null;
                    }
                }
            });

            AlertDialog alert = builder.create();

            alert.show();
        }
    }
}

Cropoption ::

package com.any;

import android.content.Intent;
import android.graphics.drawable.Drawable;

public class CropOption {
    public CharSequence title;
    public Drawable icon;
    public Intent appIntent;
}

这篇关于Android摄像头意图作物的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆