사진촬영을 하여서 그 파일을 제가 원하는 경로와 파일명으로 저장 하려고 합니다.
그런데 이래저래 알아보니...
Uri currImageURI = data.getData();
은 장비마다 되는것이 있고 안되는 것이 있다고 하더군요...
저도 테스트 해본 결과 갤넥으로 해보니.... Uri 값이 null 로 떨어지는 것을 확인 할 수 있었습니다.
원인을 살펴보니... 프로그램에서 사진기능으 호출하여 촬영을 하면 device 상에서 저장이 안되 더라구요...
그래서 경로를 못가져 오는게 아닌가 싶습니다.
그래서 이래저래 뒤지다가 보니
Bitmap bm = (Bitmap)data.getExtras().get("data");
이런식으로 비트맵으로 땡겨 오는 것은 되더라구요...
그래서 이렇게 받은 비트맵을 그냥 File 클래스 써서 카피시켜 버릴려고 하고 또 그렇게 해서 성공을 하였습니다.
bm.compress(CompressFormat.JPEG, 150, out)
compress 메소드를 사용하였는데 이렇게 하니 사진 화질이 저질 이더라구요...
두번째 인자가 퀄리티 라고 되있어서 그걸 처음에 70으로 쓰니 너무 화질이 떨어져서 100으로 올렸더니 별 차이 없고
그래서 200으로 올렸더니 제대로 저장이 안되는 것을 확인할 수 있었습니다.
compress 말고 비트맵을 화질을 좋게 저장할 수 있는 방법이 없을까요??
아네.. 감사합니다...
CompressFormat.PNG, 100 으로 저장을 하였는데도 마찬가지 입니다.
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_PICTURE); protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(requestCode == TAKE_PICTURE) { //Uri currImageURI = data.getData(); Bitmap bm = (Bitmap)data.getExtras().get("data"); File copyFile = new File("/mnt/sdcard/external_sd/geoSync/Project/testPNG.jpg"); OutputStream out = null; try { copyFile.createNewFile(); out = new FileOutputStream(copyFile); if( bm.compress(CompressFormat.PNG, 100, out)); } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (Exception e2) { e2.printStackTrace(); } } Toast.makeText(getApplicationContext(), bm.toString(), 3000).show(); //Toast.makeText(getApplicationContext(), "CAMERA : " + getRealPathFromURI(currImageURI), 3000).show(); } }
제가 이런식으로 땡겨 왔거든요... 그냥 사진을 촬영하는건데 원래 해상도가 낮다니....
그냥 똑같이 실행되는 어플 직접 실행해서 하면 고화질로 나오는데...
왜 이렇게 해상도가 떨어지게 저장이 되는 걸까요?
그리고 비트맵 해상도 확인 하려면 어떻게 해야죠?? 디버깅을 해보는데 어떤 수치인지 모르겠습니다...ㅜㅜ
해결 했습니다. 아.. 진작에 책을 볼걸... 매번 구글링 하는게 익숙해 지다 보니깐요...
onActivityResult 는 사용하지 않고
public void onClick(View v) {
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File("경로", "testtest.jpg");
Uri outputFileUri;
outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
}
이렇게 하니깐 잘 저장 되고 해상도도 좋습니다.... ㅡㅡ;; 참고 하시길....




CompressFormat.PNG, 100 으로 저장해보시구요...
그게 이상하면 애초에 원본이 화질이 안좋은겁니다.
bm의 해상도부터 확인해보시죠....