카메라나 갤러리로부터 이미지를 가져와서 Crop 하여 Crop된 이미지를 저장하는 코드이다.
다음 주소들을 참고하였다. (사실 거의 배낀 수준.. 설명이 아주 잘 나와있다.)
http://theeye.pe.kr/entry/example-of-image-crop-with-camera-and-album-picker-on-android
http://blog.naver.com/PostView.nhn?blogId=legendx&logNo=40132435162
- 갤러리에서 이미지 가져오는 부분
private void getPhotoFromGallery() { // 갤러리에서 이미지 가져오기
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, PICK_FROM_GALLERY);
}
- 카메라 촬영 후 이미지 가져오는 부분
private void getPhotoFromCamera() { // 카메라 촬영 후 이미지 가져오기
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 임시로 사용할 파일의 경로를 생성
String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
- onActivityResult() 에서 requestCode 별로 동작하도록 함
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case PICK_FROM_GALLERY:
{
mImageCaptureUri = data.getData();
Log.i("NR", mImageCaptureUri.getPath().toString());
// 이후의 처리가 카메라 부분과 같아 break 없이 진행
}
case PICK_FROM_CAMERA:
{
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(mImageCaptureUri, "image/*");
// crop한 이미지를 저장할때 200x200 크기로 저장
intent.putExtra("outputX", 200); // crop한 이미지의 x축 크기
intent.putExtra("outputY", 200); // crop한 이미지의 y축 크기
intent.putExtra("aspectX", 2); // crop 박스의 x축 비율
intent.putExtra("aspectY", 1); // crop 박스의 y축 비율
intent.putExtra("scale", true);intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_FROM_CAMERA);break;
}
case CROP_FROM_CAMERA:
{
final Bundle extras = data.getExtras();
// crop된 이미지를 저장하기 위한 파일 경로
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp/" + System.currentTimeMillis() + ".jpg";
if (extras != null) {
Bitmap photo = extras.getParcelable("data"); // crop된 bitmap
storeCropImage(photo, filePath);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); // 갤러리를 갱신하기 위해..
...
}
File file = new File(mImageCaptureUri.getPath());
if (file.exists()) {
file.delete();
}
}
}
- Bitmap을 SD 카드에 저장하는 부분
private void storeCropImage(Bitmap bitmap, String filePath) {
File copyFile = new File(filePath);
BufferedOutputStream out = null;
try {
copyFile.createNewFile();
out = new BufferedOutputStream(new FileOutputStream(copyFile));
bitmap.compress(CompressFormat.JPEG, 100, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
Eclipse 시작할때 Initializing Java Tooling 멈춤현상 해결방법 (0) | 2014.06.30 |
---|---|
[안드로이드] '.. must override a superclass method' 오류 해결 (0) | 2013.05.12 |
[안드로이드] 커스텀 타이틀바 (Custom TitleBar) 만들기 (0) | 2013.01.08 |
[안드로이드] getResources().getDrawable(id) Out of Memory 오류 (0) | 2012.12.28 |
[안드로이드] Facebook 오류 (error_code=1 Error 1349040 Invalid Application ID: The specified application ID is invalid) (0) | 2012.12.27 |