2013-04-15 3 views
2

나는 자신의 컨트롤러를 만들어 안드로이드 카메라로 사진을 찍습니다. 내 문제는 출력이 예상보다 작은 이미지를 보여줍니다. 나는이처럼 내 비트 맵의 ​​폭과 높이를 확인했습니다android 카메라로 사진 찍기

int w = bmp.getWidth(); 
int h = bmp.getHeight(); 

이것은 내가 픽셀 크기라고 가정 w = 480h = 640 출력합니다. 이 사진

public void takePicture() { 
     Log.i("Camera View: ", "Take Picture"); 
     camera.takePicture(null, null, new PictureCallback() { 
      @Override 
      public void onPictureTaken(byte[] data, Camera camera) { 
       if (null != callback) { 
        callback.onJpegPictureTaken(data, camera); 

       } 
      } 
     }); 
} 

을 가지고 내 방식 인 경우이 이벤트 onJpegPictureTaken

@Override 
    public void onJpegPictureTaken(byte[] data, Camera camera) { 
     Intent i = new Intent(this, ImageEditing.class); 
     i.putExtra("image", data); 
     startActivity(i); 
    } 

이것의 목적은 확대 같은 이미지를 편집하기 위해 새로운 Activity를 시작하는 것입니다 내 Activity 구독 및 질질 끄는. 이 ImageEditing.class이 같은 사진을 가져옵니다 내가 처음 내 ImageView 인해 ImageView의 높이와 폭에 약간의 제한을 한 것으로 생각

flipped = flipByteArrayNintyDegress(getIntent().getExtras() 
       .getByteArray("image")); 

     Bitmap bmp = BitmapFactory.decodeByteArray(flipped, 0, flipped.length); 
     image = (ImageView) findViewById(R.id.imageView1); 
     image.setImageBitmap(bmp); 
     image.setOnTouchListener(this); 

을, 그러나 그것은 사실이 아니다. 여기

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="matrix"/> 

</FrameLayout> 

나는 이미지를 캡처 할 때 결과입니다

enter image description here 사람이 여기에 무슨 일이 일어나고 있는지 알고 있나요 다음은 레이아웃 XML은? 이미지의 크기가 조절되는 이유는 무엇입니까?

+2

이미지는 – Prisoner

답변

5

dataonJpegPictureTaken()으로 반환되며 축소판 그림으로 표시됩니다. 에 getSupportedJpegThumbnailSizes() 님이보고 한 크기 중 하나가 나타납니다. byte[] 배열을 통해 전체 전체 해상도 이미지를 보내려면 JPEG 이미지로 압축/인코딩 된 힙 메모리가 카메라에 충분하지 않습니다. 따라서 결과를 미리 볼 수있는 빠른 방법으로 미리보기가 전송됩니다. 전체 해상도로 이미지에 액세스하려면 이미지의 저장 위치를 ​​찾아야합니다.

또한, BitmapFactory.Options의 축척 인수로 열어야 만 메모리가 Bitmap으로 맞춰집니다.

또한 Camera.Parameters에서 setPictureSize()을 확인하고 getSupportedPictureSizes()과 함께 사용할 수있는 지원되는 크기를 확인하십시오.


하자 안드로이드는 당신를 들어 사진을 촬영 : Allow user to select camera or gallery for image :

당신은 안드로이드 시스템 카메라 응용 프로그램은 전체 해상도의 사진을 촬영하고 이와 같은 Activity 후 사용 예로 돌아 발생할 수 있습니다. Activity은 카메라로 캡처 한 전체 해상도 저장된 이미지 파일에 액세스 할 수 있습니다.

이미지를 전체 해상도로 회전하거나 회전하려면 (이 크기로 열 수는 없지만 Bitmap으로), AFine 변환을 설명하는 EXIF ​​데이터를 수정할 수 있습니다. 이렇게하면 실제 픽셀 데이터는 수정되지 않지만 대부분의 시스템에 표시되는 방식이 변경됩니다. 이 사이트에서 EXIF ​​데이터를 읽고 쓰는 방법에 대한 몇 가지 예가 있지만 현재 사용할 수있는 코드 예제는 없습니다.

+0

그래서'은'onJpegPictureTaken() 내에서 이미지를 저장해야 sooooo는 메타입니까? –

+0

아니, 그게 도움이되지 않습니다. 해당 기능에서 가져온 미리보기 이미지 데이터는 사용자가 어떤 작업을 수행하든 관계없이 커지지 않습니다. 'setPictureSize()'를 사용하면 더 크게 만들 수 있지만 그리 크지는 않습니다. –

+0

Hrmp. 꽤 성가신 .. –

0

flipByteArrayNintyDegress 구현은 어떻게됩니까?

/Yaron

+0

출력 해상도는 입력 해상도와 동일합니다. –

관련 문제