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

카메라를 띄워서 촬영 후 이미지 방향 [closed]

0 추천
카메라 엑티비티의 orientation은 landscape로 고정했습니다.

폰을 가로로일땐 문제없으나 세로로 세워서 찍으면 90도 돌아서 나옵니다.

찍은 후 돌려서 변경하려고 해도, 지금 촬영한 사진이 세로로 찍은지 가로로 찍은지 알수가 없어서 돌리질 못하겟습니다.

센서사용 말고 다른 방법은 없을까요??
질문을 종료한 이유: 해결하였습니다.
연필좀주세요 (810 포인트) 님이 2015년 3월 13일 질문
연필좀주세요님이 2015년 3월 18일 closed

3개의 답변

0 추천
 
채택된 답변
자답입니다.

OrientationEventListener을 활용하여 현재 카메라의 방향을 읽어서 그값으로 회전을 하였습니다.

내장카메라를 사용하지 않아서 일일이 해줘야하는군요..
연필좀주세요 (810 포인트) 님이 2015년 3월 18일 답변
+1 추천

사진을 찍고 회전값을 구할 수 있습니다.

 

public static int getImageOrientation(String path){

    int rotation =0;
    try {
        ExifInterface exif = new ExifInterface(path);
        int rot= exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

        if(rot == ExifInterface.ORIENTATION_ROTATE_90){
            rotation = 90;
        }else if(rot == ExifInterface.ORIENTATION_ROTATE_180){
            rotation = 180;
        }else if(rot == ExifInterface.ORIENTATION_ROTATE_270){
            rotation = 270;
        }else{
            rotation = 0;
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return rotation;
}

회전값 구한 이후 Matrix 이용하셔서 이미지 회전 시키시면 됩니다.

public static Bitmap imgRotate(Bitmap bmp, int orientation){
    int width = bmp.getWidth();
    int height = bmp.getHeight();

    Matrix matrix = new Matrix();
    matrix.postRotate(orientation);

    Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
    bmp.recycle();

    return resizedBitmap;
}
이드로이드 (22,930 포인트) 님이 2015년 3월 13일 답변
답변 감사합니다.
리턴값이 0으로 나오네요. 바뀌지 않습니다..
현재 내장 카메라가 아닌 새로 만들어서 사용하고있습니다.
현재 Camera.PictureCallback mPicture = new Camera.PictureCallback() {
        byte[] bytes = null;
       
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {

에서 찍은 사진을 회전시키려 하고잇는데, 위에 답변내용을 적용하니 리턴값이 0으로 뜹니다..
/storage/emulated/0/Pictures/Crop_1426231946374.jpg
이미지 경로가 위 형태가 맞는지 확인해 보세요. 앞에 file://가 붙으면 안됩니다.
요 문제도 아니고..카메라 앱을 직접 구현하신거라면 해당 액티비티에서 센서이용해서 회전값을 계산할 수밖에 없을듯 합니다.

기본 내장 카메라앱도 촬영시에 내부적으로 그런 작업을 하고 사진 테그에 회전값을 입력할테니까요,
0 추천

매니페스트에서 카메라 엑티비티는 가로로 고정이 되어있는데 의미가 있나싶네요ㅠㅠ 폰을 세로로 하던 가로로 하던 폰 입장에선  물체가 가로 세로 변하는거잖아요.. 사진자체의 orientation은 landscape..  아닌가요ㅠㅠ?? 

연필좀주세요 (810 포인트) 님이 2015년 3월 13일 답변
아 계속 추가적인 답변 정말 감사드립니다.
위에 링크도 읽었구요, 경로도 재확인했습니다!
...