안드로이드 개발 질문/답변
(글 수 45,052)
사진을 찍거나 앨범에서 선택하여 서버로 전송하는데요
앨범에서 선택하였을 경우 앨범의 해상도 그대로 2천 몇*1천 몇 사이즈로 전송이 됩니다.
그래서 단말에서 표시하는 사이즈 480*480으로 리사이즈해서 보내주니 이미지에 별 손실 없이 출력이 되는데요...
사진을 찍어서 했을 경우 문제가 됩니다.
아래와같이 안드로이드 내장 카메라를 호출 후 결과를 받았을 때
앨범은 Uri 형태로 받아서 비트맵변환을 해주고, 사진을 직접 찍었을 땐
Uri로 반환하지 않고 비트맵으로 바로 반환하길래 바로 받아서 리사이즈나
전송용 byte[] 객체에 넣어주는 작업들을 하여 이미지 전송을 하는데요...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK){
if(requestCode == TAKE_CAMERA){
Bitmap currImageBitmap = (Bitmap) data.getExtras().get("data");
}else if(requestCode == TAKE_GALLERY){
Uri currImageURI = data.getData();
Bitmap bm = Images.Media.getBitmap(getContentResolver(), currImageURI);
Bitmap bm = Images.Media.getBitmap(getContentResolver(), currImageURI);
}
}
}
둘다 리사이즈를 하지 않고 보내보았는데 앨범에서 선택한경우 2천몇*1천몇 사이즈가 그대로 전송이 되어 서버 PC 에서
확인 하니 단말기를 직접 PC에 연결해서 사진을 이동한 것과 같은 해상력의 사진이 전송되어있는데...
직접사진을 찍었을 경우 160*120으로 저장이 됩니다. ㅠ_ㅠ OnActivityResult에서 사진을 저장할때 다른방식으로 해야할까요...?
둘다 리사이즈를 하지 않고 보내보았는데 앨범에서 선택한경우 2천몇*1천몇 사이즈가 그대로 전송이 되어 서버 PC 에서
확인 하니 단말기를 직접 PC에 연결해서 사진을 이동한 것과 같은 해상력의 사진이 전송되어있는데...
직접사진을 찍었을 경우 160*120으로 저장이 됩니다. ㅠ_ㅠ OnActivityResult에서 사진을 저장할때 다른방식으로 해야할까요...?
2010.09.29 22:45:52
답변 감사합니다 그냥가자님(매번 감사하죠 ㅎ)
인텐트에 intent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
요렇게 추가해 주는게 맞는건가요?
그리구 ActivityResult 에서 Uri는 어떻게 가져 오는거죠..?
아래처럼 앨범에서 가져왔을때랑 같은형식으로 하면 될까요?
Uri currImageURI = data.getData();
Bitmap currImageBitmap = Images.Media.getBitmap(getContentResolver(), currImageURI);
그리고 단말마다 다르게 작동한다는게...어떤식으로 다르게 작동하는건가요..? 사이즈만 2천몇*1천몇 해상도로전송하지만 않으면(느려서) 되는데...리사이즈 정도만 하면 되는데...불가능 할까요...?
인텐트에 intent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
요렇게 추가해 주는게 맞는건가요?
그리구 ActivityResult 에서 Uri는 어떻게 가져 오는거죠..?
아래처럼 앨범에서 가져왔을때랑 같은형식으로 하면 될까요?
Uri currImageURI = data.getData();
Bitmap currImageBitmap = Images.Media.getBitmap(getContentResolver(), currImageURI);
그리고 단말마다 다르게 작동한다는게...어떤식으로 다르게 작동하는건가요..? 사이즈만 2천몇*1천몇 해상도로전송하지만 않으면(느려서) 되는데...리사이즈 정도만 하면 되는데...불가능 할까요...?




일단 말씀하시는 문제를 고치려면...
인텐트의 MediaStore.EXTRA_OUTPUT Extra값에 URI를 넣으면 해당 URI에 파일을 저장해 줍니다.
onActivityResult에서 OK인지 확인해서 URI의 그림을 꺼내보면 되는거죠...
여기서 문제점이 발생하는데요... 단말마다 다르게 동작한다는점입니다.... 잴 크리티컬하죠...
카카오톡 같은 어플은 그냥 에라 모르겠다 식으로 맡겨 버립니다. 아무런 보정이 없이 그냥 하는거죠. ㅡㅡㅋ
뭐 딱히 보정할만한 방법도 없는게 사실이라...