본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android/안드로이드] camera take & crop 동시에 하기.

by 돼지왕 왕돼지 2012. 10. 4.
반응형

Camera 로 사진을 찍으면서 동시에 crop 을 하는 방법에 대해 알아보고자 한다.

Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE );
String fileName = System.currentTimeMillis() + ".jpg";
mCapturedImageUri = Uri.fromFile( new File( Environment.getExternalStorageDirectory(), fileName ) );
intent.putExtra( MediaStore.EXTRA_OUTPUT, mCapturedImageUri );
intent.putExtra( "crop", "true" );
intent.putExtra( "scale", true );
intent.putExtra( "aspectX", );  
intent.putExtra( "aspectY", );  
intent.putExtra( "outputX", 100);  
intent.putExtra( "outputY", 100);
intent.putExtra( "return-data", true); 
startActivityForResult(
intent, requestCode );

 

1. Camera 앱에 따라서 EXTRA_OUTPUT 값을 무시하고, 카메라 기본 설정을 바탕으로 사진을 찍는 앱들이 있다. 이럴 경우 Crop 하기 위해 찍은 사진 파일은 카메라 앱의 기본 폴더에 저장이 되어 삭제하기 어렵다.
 (인터넷에는 가장 최근에 미디어 스토어에 저장된 사진파일을 삭제하는 방식을 사용하기도 하는데, 이는 위험한 발상이다. 사진들을 다운로드 받으면서 당신이 만든 앱을 사용한다면, 다운받는 사진들이 지워질 수도 있다. ) 

크롭된 파일은 activity result에서 다음과 같이 받는다.

Bitmap bitmap = intent.getParcelableExtra( "data" );




2. Camera 앱에 따라서 Crop 옵션을 무시하는 앱들도 있다.
 이럴 경우 보통 EXTRA_OUTPUT 을 지켜 지정한 Path 에 사진을 저장한다. 이 경우에는 임시로 찍은 사진은 삭제할 수 있지만, 다시 Crop intent 를 실행해줘야 하는 불편함이 있다. 

Intent intent = new Intent( ACTION_CROP );
intent.setDataAndType( mCapturedImageUri, TYPE_IMAGE );
intent.putExtra( "crop", "true" );
intent.putExtra( "scale", true );
intent.putExtra( "aspectX", );  
intent.putExtra( "aspectY", );  
intent.putExtra( "outputX", 100);  
intent.putExtra( "outputY", 100);
intent.putExtra( "return-data", true); 
startActivityForResult( intent, requestCode );


 



setDataAndType 을 통해 찍은 사진을 지정해주는 것이 중요하다.


crop 결과값은 마찬가지로 data를 통해 들어온다.


Bitmap bitmap = intent.getParcelableExtra( "data" );
// 찍은 사진을 지우는 코드 


도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



 
반응형

댓글