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

안드로이드 크롭할 때 비율을 선택할 수 있도록 하고 싶습니다

0 추천
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.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.ImageView; 

public class CropActivity 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; 
 
 
 @Override 
 public void onCreate(Bundle savedInstanceState)  
 {   
  super.onCreate(savedInstanceState);   
  setContentView(R.layout.activity_crop);  
  
  mPhotoImageView = (ImageView) findViewById(R.id.image); 
 
  
  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();  
      }  
     };   
     new AlertDialog.Builder(this)   
     .setTitle("업로드할 이미지 선택") 
     .setPositiveButton("사진촬영", cameraListener)
     .setNeutralButton("앨범선택", albumListener)      
     .setNegativeButton("취소", cancelListener)    
     .show();
     }
 
 
 /**   * 카메라에서 이미지 가져오기   */ 
 private void doTakePhotoAction()  
 {  
   
  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);   
  // 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.    //
  intent.putExtra("return-data", true); 
  startActivityForResult(intent, PICK_FROM_CAMERA); 
  }  
 /**   * 앨범에서 이미지 가져오기   */  
 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: 
  {      
   // 이후의 처리가 카메라와 같으므로 일단  break없이 진행합니다.     
   // 실제 코드에서는 좀더 합리적인 방법을 선택하시기 바랍니다.   
   mImageCaptureUri = data.getData();     
   }       
  case PICK_FROM_CAMERA: 
  {     
   // 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다.    
   // 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다.
 
     Intent intent = new Intent("com.android.camera.action.CROP");  
     intent.setDataAndType(mImageCaptureUri, "image/*"); 
     intent.putExtra("outputX", 350);       
     intent.putExtra("outputY", 350);  
     intent.putExtra("aspectX", 1);      
     intent.putExtra("aspectY", 1);       
     intent.putExtra("scale", true);   
     intent.putExtra("return-data", true);  
     startActivityForResult(intent, CROP_FROM_CAMERA);   
  
   }
  }
     
 }  
 
 @Override  public void onClick(View v)  
 {  
  
 }
}

현재 소스입니다

현재 이렇게 크롭되는데요

폰에 있는 일반 카메라 어플 스크린샷인데 저런식으로 4:3 16:9 선택할 수 있도록 하고 싶습니다

intent.putExtra("aspectX", 1);     
intent.putExtra("aspectY", 1);

이 부분의 숫자를 바꾸면 비율이 변하는건 알겠는데 여러개 늘어서서 선택할 수 있도록 하려면 어떻게 해야 하나요?

      

라미아 (170 포인트) 님이 2014년 11월 24일 질문

1개의 답변

0 추천
intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

 

이 두개를 그냥 지우시면 됩니당
익명사용자 님이 2019년 10월 26일 답변
...