마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

사진 촬영 후 크롭된 이미지를 다음 액티비티에 넘기고싶습니다.

0 추천

crop 부분에서 비트맵 photo 로 mPhotoImageView 에 셋 해주엇는데. 

이 이미지는 넥스트 버튼을 누르면 넘어가지가안구요. 그냥 다음 액티비티만 나타나게됩니다.

비트맵을 다시 저장해서 URI 형태로 하는게 잇다는데 좀 도와주세요 ㅠㅠ 소스는 넘어가는부분 과 CROP 된 부분이 포함된 전체소스를 나두엇습니다 부탁드립니다.


import java.io.ByteArrayOutputStream;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;

public class Photo extends Activity implements OnClickListener {
	private static final int PICK_FROM_CAMERA = 0;
	private static final int PICK_FROM_ALBUM = 1;
	private static final int CROP_FROM_CAMERA = 2;
	private Uri mImageCaptureUri;
	private ImageView mPhotoImageView;
	private Bitmap photo;
	// private Button mButton;
	String mImageUri;
	private String dataUri;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.photo);

		mPhotoImageView = (ImageView) findViewById(R.id.image);

		Button btn1 = (Button) findViewById(R.id.button);
		btn1.setOnClickListener(this);

		Button btn2 = (Button) findViewById(R.id.back);
		btn2.setOnClickListener(this);

		Button btn3 = (Button) findViewById(R.id.next);
		btn3.setOnClickListener(this);

	}

	/**
	 * 앨범에서 이미지 가져오기
	 */
	private void doTakePhotoAction() {

		Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

		// 임시로 사용할 파일의 경로를 생성
		String url = "DCIM/AT" + String.valueOf(System.currentTimeMillis())
				+ ".jpg";
		mImageCaptureUri = Uri.fromFile(new File(Environment
				.getExternalStorageDirectory(), url));

		intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
				mImageCaptureUri);
		intent.putExtra("return-data", true);
		startActivityForResult(intent, PICK_FROM_CAMERA);
	}

	/**
	 * to get Image from album
	 */
	private void doTakeAlbumAction() {
		// 앨범 호출
		Intent intent = new Intent(Intent.ACTION_PICK);
		intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
		startActivityForResult(intent, PICK_FROM_ALBUM);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode != RESULT_OK) {
			return;
		}
		switch (requestCode) {
		case CROP_FROM_CAMERA: {
			// 크롭이 된 이후의 이미지를 넘겨 받습니다.
			// 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
			// 임시 파일을 삭제합니다.
			final Bundle extras = data.getExtras();

			if (extras != null) {
				Bitmap photo = extras.getParcelable("data");
				mPhotoImageView.setImageBitmap(photo);
			}

			// 임시 파일 삭제
			File f = new File(mImageCaptureUri.getPath());
			if (f.exists()) {
				f.delete();
			}

			break;
		}

		case PICK_FROM_ALBUM: {

			mImageCaptureUri = data.getData();
			setImage();
		}

		case PICK_FROM_CAMERA: {

			// 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
			// 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
			setImage();
			Intent intent = new Intent("com.android.camera.action.CROP");

			intent.setDataAndType(mImageCaptureUri, "image/*");
			intent.putExtra("outputX", 300);
			intent.putExtra("outputY", 300);
			intent.putExtra("aspectX", 2);
			intent.putExtra("aspectY", 2);
			intent.putExtra("scale", true);
			intent.putExtra("return-data", true);

			startActivityForResult(intent, CROP_FROM_CAMERA);

			break;
		}
		}
	}

	@Override
	public void onClick(View v) {

		switch (v.getId()) {

		case R.id.button:
			new AlertDialog.Builder(this).setTitle("업로드할 이미지 를 선택")
					.setPositiveButton("사진촬영", cameraListener)
					.setNeutralButton("앨범보기", albumListener)
					.setNegativeButton("취소", cancelListener).show();
			break;
		case R.id.back:
			Intent back = new Intent(this, Video.class);

			startActivity(back);
			break;
		case R.id.next:

			Intent i = new Intent(this, Edit.class);
			i.putExtra("uri", mImageCaptureUri.toString());

			startActivity(i);

			break;
		}

	}

	DialogInterface.OnClickListener cameraListener = new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			doTakePhotoAction();
		}
	};

	DialogInterface.OnClickListener albumListener = new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			doTakeAlbumAction();
		}
	};

	DialogInterface.OnClickListener cancelListener = new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			dialog.dismiss();

		}
	};

	public void setImage() {
		mPhotoImageView.setImageURI(mImageCaptureUri);

	}
}

 

초보자는서러워요 (310 포인트) 님이 2014년 9월 19일 질문

1개의 답변

0 추천
Crop된 이미지를 mPhotoImageView에 세팅 후 mImageCaptureUri를 삭제해버리는데 넘겨줄 이미지가 없는게 당연합니다.

주석으로 임시 파일 삭제 하는 부분을 없에버리면 정상 동작 할듯하네요.
q1212 (26,020 포인트) 님이 2014년 9월 19일 답변
...