카메라의 이미지를 7.0 장치에서 잘라내려고합니다. 나는 안드로이드 인 텐트를 사용하여 자르기 함수를 작성하고 FileUriExposedException을 피하기 위해 파일 제공자를 통해 내 파일을 노출했습니다.카메라 동작 - 잘리지 않는 누더기
문제는 카메라를 열고 자르기 도구가 나타나지 않고 내 이미지보기에 아무 것도 표시되지 않는 것입니다. 여기
private void cropImage() {
try {
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(uri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("outputX", 200);
cropIntent.putExtra("outputY", 200);
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("scale", true);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, CROP_CODE);
} catch (ActivityNotFoundException aex) {
aex.printStackTrace();
Toast.makeText(this, "Current Device Has No Crop Support", Toast.LENGTH_LONG).show();
}
}
내 카메라 의도 코드 :
가 여기 내 작물 기능 코드의 내가 카메라 비트 맵에서 직접 이미지 뷰를 설정하려고하면
private void photoDialog() {
final CharSequence[] imgOptions = {"Take Photo", "Select from Gallery"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose Image Options");
builder.setItems(imgOptions, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (imgOptions[i].equals("Take Photo")) {
try {
Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(Environment.getExternalStorageDirectory(), "tmp_" + String.valueOf(System.currentTimeMillis()));
Log.d("MainActivity", "File Saved in:\t" + file.getAbsolutePath().toString());
if (Build.VERSION.SDK_INT > 23) {
uri = FileProvider.getUriForFile(MainActivity.this, getString(R.string.file_prov_authority), file);
} else {
uri = Uri.fromFile(file);
}
camIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
camIntent.putExtra("return-data", "true");
startActivityForResult(camIntent, CAM_CODE);
} catch (ActivityNotFoundException ex) {
ex.printStackTrace();
}
} else if (imgOptions[i].equals("Select from Gallery")) {
Intent galIntent = new Intent(Intent.ACTION_GET_CONTENT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(Intent.createChooser(galIntent, "Open With"), GAL_CODE);
}
}
});
, 나도이 예외를 얻을 :
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
내 활동 결과 코드 :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAM_CODE && resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
img_camera.setImageBitmap(bitmap);
cropImage();
}
else if (requestCode == GAL_CODE && resultCode == RESULT_OK) {
if (data != null) {
uri = data.getData();
img_camera.setImageURI(uri);
cropImage();
}
}
else if (requestCode == CROP_CODE) {
Bundle photo_extras = data.getExtras();
Bitmap bitmap = photo_extras.getParcelable("data");
img_camera.setImageBitmap(bitmap);
}
}
갤러리 코드의 자르기는 동일한 기능이지만 완벽하게 작동합니다.
모든 블로그와 YT 비디오를 크롤링하고 Ntn이 지금까지 작동 했으므로 누군가 Nougat 기기에서 카메라 이미지 자르기를 도와 줄 수 있습니까? 감사.
(https://commonsware.com/blog/2013/01/23/no-android-does-not-have- [안드로이드는'CROP'을'Intent'이 없습니다] crop-intent.html). 많은 [안드로이드에서 사용할 수있는 이미지 자르기 라이브러리] (https://android-arsenal.com/tag/45?sort=created)가 있습니다. 하나를 사용하십시오. – CommonsWare
@CommonsWare, 아서 허브 라이브러리에서 카메라 이미지를 자르는 방법을 알려주시겠습니까? 고마워요 –
그 라이브러리를 사용하지 않았습니다. 질문이있는 경우 도서관 개발자가 제공하는 지원 옵션을 확인하십시오. – CommonsWare