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

안드로이드 circle crop 질문입니다.도와주세요 [closed]

0 추천

소스가 지금 이렇게 짜져잇습니다 어느부분에 원 크롭을 짜야하고 어떤식으로하는지 도움을 주셨으면 좋겠습니다. 보고 열심히 분석하겠습니다.


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, img;
	private Bitmap photo;
	// private Button mButton;
	String mImageUri;
	private String dataUri;

	private Context mContext;

	private Button btn1;
	private Button btn2;
	private Button btn3;

	private String mSaveCropPhotePath;
	private Bitmap bmThumbnail;
	private String byteArray;
	private Bitmap bm;
	private String kk;

	private Uri picUri;

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

		mContext = this;

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

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

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

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

		// byte[] arr = getIntent().getByteArrayExtra("image");
		// Bitmap bm = BitmapFactory.decodeByteArray(arr, 0, arr.length);

		System.gc();
		Intent i = getIntent();
		Bundle extras = i.getExtras();
		kk = extras.getString("asdf");
		Log.e("kk", kk);
	}

	/**
	 * 앨범에서 이미지 가져오기
	 */
	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");

				ByteArrayOutputStream os = new ByteArrayOutputStream();
				photo.compress(CompressFormat.JPEG, 100, os);
				byte[] bin = os.toByteArray();

				Log.i("lkm",
						"onActivityResult ======= mPhotoImageView , data : "
								+ data.getDataString());

				if (photo == null) {

				} else {
					// String[] mFile = targetUrl.split("/");
					String mFileName = String.valueOf(System
							.currentTimeMillis()) + ".jpg";
					String savePath = Environment.getExternalStorageDirectory()
							.getAbsolutePath() + "/" + mFileName;

					FileOutputStream fos = null;
					File f = new File(savePath);
					if (f.exists()) {
						// Log.i("lkm","파일 잇어서 비트맵 저장안함");
						Toast.makeText(mContext, "파일이 존재합니다",
								Toast.LENGTH_SHORT).show();
					} else {
						try {
							Log.i("lkm", "파일 없어서 비트맵 저장시작");
							fos = new FileOutputStream(savePath);
							photo.compress(CompressFormat.JPEG, 100, fos);
							Log.i("lkm", "파일 없어서 비트맵 저장");
							Toast.makeText(mContext, "저장되었습니다.",
									Toast.LENGTH_SHORT).show();
							mContext.sendBroadcast(new Intent(
									Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri
											.parse("file://" + savePath)));
						} catch (FileNotFoundException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
							Log.i("lkm", "파일 없어서 비트맵 저장실패");
						} finally {
							try {
								fos.close();
							} catch (Exception e2) {
								// TODO: handle exception
							}
						}
					}

					mSaveCropPhotePath = savePath;

				}

				mPhotoImageView.setImageBitmap(photo);

			}

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

			break;
		}

		case PICK_FROM_ALBUM: {
			mImageCaptureUri = data.getData();
		}

		case PICK_FROM_CAMERA: {

			// 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.
			// 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.

			Log.i("lkm", "PICK_FROM_CAMERA ======= path: " + mImageCaptureUri);

			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, VideoList.class);

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

			Intent i = new Intent(this, Edit.class);
			i.putExtra("uri", mSaveCropPhotePath);
			// byte[] arr = getIntent().getByteArrayExtra("image"); 비트맵으로 넘기기
			// i.putExtra("img", arr);
			i.putExtra("asdf", kk);
			Log.e("asdf", kk);
			startActivityForResult(i, 0);
			// finish();

			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() {

		Log.i("lkm", "setImage ======= mPhotoImageView , mImageCaptureUri : "
				+ mImageCaptureUri);

		mPhotoImageView.setImageURI(mImageCaptureUri);

	}

 

질문을 종료한 이유: ㅇㅇㅇ
안드로이드찢어 (1,080 포인트) 님이 2014년 10월 27일 질문
안드로이드찢어님이 2014년 10월 27일 closed
...