배경화면이나 다른 이미지를 불러와야 할 때 기본 갤러리를 사용하여 부르는 경우가 많습니다.

갤러리의 이미지들을 불러오는 것 부터 사진을 원하는 만큼 잘라 뿌리는 작업까지 구현해 보겠습니다.


1. 기본 갤러리를 불러오기

xml 파일은 따로 제공하지 않고 버튼과 ImageView id 값만 맞춰주면 됩니다. 


public class MainActivity extends Activity {

        final int REQ_CODE_SELECT_IMAGE=100;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button picture = (Button) findViewById(R.id.Btn_Find);

picture.setOnClickListener(new OnClickListener(){

public void onClick(View v){  // 클릭하면 ACTION_PICK 연결로 기본 갤러리를 불러옵니다.

Intent intent = new Intent(Intent.ACTION_PICK);                 

intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);

intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

startActivityForResult(intent, REQ_CODE_SELECT_IMAGE); 

}

});

}

@Override 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

Toast.makeText(getBaseContext(), "resultCode : "+resultCode,Toast.LENGTH_SHORT).show();

if(requestCode == REQ_CODE_SELECT_IMAGE) 

if(resultCode==Activity.RESULT_OK) 

{     

try { 

//Uri에서 이미지 이름을 얻어온다. 

//String name_Str = getImageNameToUri(data.getData()); 


//이미지 데이터를 비트맵으로 받아온다. 

Bitmap image_bitmap = Images.Media.getBitmap(getContentResolver(), data.getData());

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


//배치해놓은 ImageView에 set 

image.setImageBitmap(image_bitmap);     

//Toast.makeText(getBaseContext(), "name_Str : "+name_Str , Toast.LENGTH_SHORT).show();


} catch (FileNotFoundException e) { 

// TODO Auto-generated catch block 

e.printStackTrace(); 

} catch (IOException e) { 

// TODO Auto-generated catch block 

e.printStackTrace(); 

} catch (Exception e)

{

            e.printStackTrace();

}     

}   

}

public String getImageNameToUri(Uri data) 

String[] proj = { MediaStore.Images.Media.DATA }; 

Cursor cursor = managedQuery(data, proj, null, null, null); 

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);


cursor.moveToFirst(); 


String imgPath = cursor.getString(column_index); 

String imgName = imgPath.substring(imgPath.lastIndexOf("/")+1); 


return imgName; 

}



2. 이미지 자르기 (Crop)


위의 소스를 참고하시고 Crop 기능만 추가해 보겠습니다.


public class MainActivity extends Activity{

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 static final String TEMP_FILE_NAME = "tempFile.jpg";

 private static final String TYPE_IMAGE = "image/*";

 private Uri mImageCaptureUri;

 private Uri mTempImageUri;

 

 private ImageView mPhotoImageView;

 private Button mButton;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Btn_Find.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {

if(event.getAction() == event.ACTION_DOWN){
// Intent intent = new Intent(Intent.ACTION_PICK);
// intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
// intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// startActivityForResult(intent, REQ_CODE_SELECT_IMAGE);

mTempImageUri = Uri.fromFile( getTempFile() );

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType( TYPE_IMAGE ); //갤러리 이미지를 불러옵니다

intent.putExtra("noFaceDetection",true); //
intent.putExtra( "crop", "true" );


intent.putExtra("scale", true);


intent.putExtra( MediaStore.EXTRA_OUTPUT, mTempImageUri );
intent.putExtra( "outputFormat", Bitmap.CompressFormat.JPEG.toString() );
startActivityForResult(intent, CROP_FROM_CAMERA);

}
if(event.getAction() == event.ACTION_UP){

}
return false;
}
});

}


 private File getTempFile(){

File file = new File( Environment.getExternalStorageDirectory(), TEMP_FILE_NAME );
try{
file.createNewFile();
}
catch( Exception e ){
Log.e("cklee", "fileCreation fail" );
}
return file;
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {


if(resultCode != RESULT_OK)


{ return;

}

switch(requestCode)
{
case CROP_FROM_CAMERA:
{
// // 크롭이 된 이후의 이미지를 넘겨 받습니다.
// // 이미지뷰에 이미지를 보여준다거나 부가적인 작업 이후에
// // 임시 파일을 삭제합니다.

tempFile = getTempFile();
if ( tempFile.exists() )
{

// Drawable d =new BitmapDrawable(BitmapFactory.decodeFile( tempFile.toString())); //비트맵으로 받은 것을 레이아웃 백그라운드로 설정!!!!
// wifi.MouseActivity.wifimain.setBackgroundDrawable(d);

finish();
}


break;
}

}
}
@Override
protected void onStop() {
super.onStop();

}
}




함수 정리 :


Drawable d =new BitmapDrawable(image_bitmap);  //비트맵으로 받은 것을 레이아웃 백그라운드로 설정합니다.

레이아웃ID.setBackgroundDrawable(d);


-----


스크린 샷은 따로 첨부하지 않겠습니다.





+ Recent posts