从相机捕获图像后,裁切不起作用

时间:2018-07-23 06:07:44

标签: java android

我尝试裁剪在相机应用程序上拍摄的图像,但是在拍摄照片库应用程序后无法正常工作并停止...

这样的错误消息。 请帮我。 我已经花了十多个小时...

07-23 14:35:27.455 12451-12451/? E/Zygote: isWhitelistProcess - Process is Whitelisted
07-23 14:35:27.455 12451-12451/? E/libpersona: scanKnoxPersonas
Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
07-23 14:35:27.458 12451-12451/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy In

活动

public class RegisterActivity extends AppCompatActivity {

    EditText register_id, register_pw, register_pw2, register_state, register_nickname;
    Button btn_register, btn_profile, btn_check;
    CircleImageView register_profile;
    User user;
    Bitmap thePic;

    private  static final int PICK_FROM_CAMERA=1;
    private static final int PICK_FROM_GALLERY = 2;
    private  static final int CROP_PIC = 3;
    private Uri picUri;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        register_id = (EditText) findViewById(R.id.register_id);
        register_pw = (EditText) findViewById(R.id.register_pw);
        register_pw2 = (EditText) findViewById(R.id.register_pw2);
        register_state = (EditText) findViewById(R.id.register_state);
        btn_register = (Button) findViewById(R.id.btn_register);
        btn_profile = (Button) findViewById(R.id.btn_profile);
        btn_check = (Button) findViewById(R.id.btn_check);
        register_profile = (CircleImageView) findViewById(R.id.register_profile);
        register_nickname = (EditText) findViewById(R.id.register_nickname);

        btn_check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferences check = RegisterActivity.this.getSharedPreferences("USERINFO", MODE_PRIVATE);
                String checkId = check.getString(register_id.getText().toString(), null);
                // id 입력창에 입력된 값을 checkId 에  대입하고 해당하는 id가 USERINFO 에 존재하는지 확인한다.
                if (checkId == null) {
                    Toast.makeText(RegisterActivity.this, "사용 가능한 ID 입니다.", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(RegisterActivity.this, "이미 존재하는 ID 입니다.", Toast.LENGTH_SHORT).show();
                }

            }
        }); //중복체크 버튼


        btn_profile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Button btn_camera;
                Button btn_gallery;

                AlertDialog.Builder dialog = new AlertDialog.Builder(RegisterActivity.this);
                dialog.setTitle("프로필 사진 등록")
                        .setNeutralButton("취소", null)
                    .setPositiveButton("카메라", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            int permissionCheck = ContextCompat.checkSelfPermission(RegisterActivity.this, Manifest.permission.CAMERA);
                            if(permissionCheck == PackageManager.PERMISSION_DENIED) {
                                ActivityCompat.requestPermissions(RegisterActivity.this, new String[]{Manifest.permission.CAMERA}, 0);
                            } // 카메라 권한이 없는 경우, 권한을 요청한다.

                            else {
                                try {
                                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                    File mfile = new File(Environment.getExternalStorageDirectory(), "file" + String.valueOf(System.currentTimeMillis()) + ".jpg");
//                                    picUri = Uri.fromFile(mfile);
                                    picUri = FileProvider.getUriForFile(RegisterActivity.this,
                                            getApplicationContext().getPackageName() + ".fileprovider", mfile);
                                    intent.putExtra(MediaStore.EXTRA_OUTPUT, picUri);
                                    intent.putExtra("return-data", true);
                                    startActivityForResult(intent, PICK_FROM_CAMERA);

                                } catch (ActivityNotFoundException anfe) {
                                    String errorMessage = "이 기기에서는 IMAGE_CAPTURE 기능을 지원하지 않습니다.";
                                    Toast.makeText(RegisterActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
                                }
                            } // 카메라 권한이 있는 경우, 카메라 앱을 실행한다.
                        }
                    }) // 카메라에서 사진 등록

                    .setNegativeButton("갤러리", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            Intent intent2 = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            try{
                                intent2.setType("image/*");
                                startActivityForResult(intent2, PICK_FROM_GALLERY);
                            } catch (ActivityNotFoundException e) {
                                // Do nothing for now
                            }
                        }
                    }) // 갤러리에서 사진 등록
                    .show();

            }
        }); // 사진등록 버튼

    } // onCreate








@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==PICK_FROM_CAMERA && resultCode==RESULT_OK){
            //register_profile.setImageURI(picUri);
            performCrop();

//            if(data != null) {
//                picUri = data.getData();
//                performCrop();
//            } else if (data == null){
//                Log.d("CAMERA ERROR", "data 가 null 임");
//            }
        } // 카메라에서 찍은 사진을 가져오는 경우

        else if(requestCode==PICK_FROM_GALLERY && resultCode==RESULT_OK) {
            picUri = data.getData();
            performCrop();

        } // 갤러리에 저장된 사진을 가져오는 경우

        else if(requestCode == CROP_PIC && resultCode==RESULT_OK) {
            Bundle extras = data.getExtras();
            thePic = extras.getParcelable("data");
            register_profile.setImageBitmap(thePic);
        } // 사진을 가져와 CROP 하는 부분

    } // 사진을 받아와 프로필 사진에 저장하는 부분

    private void performCrop() {
        try {
            Intent cropIntent = new Intent("com.android.camera.action.CROP");
            cropIntent.setDataAndType(picUri, "image/*");
            cropIntent.putExtra("crop", true);
            cropIntent.putExtra("OutputX", 130);
            cropIntent.putExtra("OutputY", 130);
            cropIntent.putExtra("aspectX", 1);
            cropIntent.putExtra("aspectY", 1);
            cropIntent.putExtra("return-data", true);
            startActivityForResult(cropIntent, CROP_PIC);

        } catch(ActivityNotFoundException e) {
            Toast.makeText(this, "이 장치는 CROP 을 지원하지 않습니다.", Toast.LENGTH_SHORT).show();
        }
    } // 이미지를 잘라내어 그 결과를 보낸다.


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode==0) {
            if(grantResults[0]==0) {
                Toast.makeText(this, "카메라 권한 승인", Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(this, "카메라 권한 거절됨", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

0 个答案:

没有答案