2012-08-09 2 views
5

나는 거기에 많은 게시물을 읽었습니까? 하지만 나는 정확하게 대답을 찾지 못합니다. BitmapFactory를 사용하지 않고,메모리 부족 예외없이 "onPictureTaken"에서 사진을 회전하는 방법은 무엇입니까?

@Override 
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) { 
    try { 


     Bitmap bitmap = BitmapFactory.decodeByteArray(paramArrayOfByte, 0, 
     paramArrayOfByte.length); 

     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 

     FileOutputStream os = new ileOutputStream(Singleton.mPushFilePath); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 
     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, 
      height, matrix, false); 

     resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, os); 
     os.close(); 
     ... 

사진을 회전 할 수있는 방법이 있나요 :

은 뭔가 이렇게하려고? 나는 품질의 손실없이 회전 사진을 원한다!

+0

여기 좋은 해결책이 있습니다. http : //stackoverflow.com/questions/2225363/c-sharp-rotate-bitmap-90-degrees – paul

+0

정말 좋았지 만 C#? –

+0

죄송합니다 - 태그를 읽지 않았습니다! – paul

답변

4

아마도 Camera.setDisplayOrientation을 사용하여 이미 회전 한 사진을 찍을 수 있습니까? Android camera rotate을 확인하십시오. 또한 Camera.Parameters.setRotation()을 조사하십시오. 이 기술 중 하나는 당신을 위해 트릭을해야합니다.

그렇지 않으면 Bitmap.compress에서 매개 변수 95를 사용하는 경우를 제외하고는 코드가 잘 보이지만 손실없는 압축에는 100을 사용해야합니다.

메모리 부족 예외를 피하려면 Camera.Parameters.setPictureSize()를 사용하여 낮은 해상도의 사진 (예 : 3Mpx)을 사용하십시오. 즉, 실제로 8 메가 픽셀 사진이 필요합니까? 카메라에서 지원되는 크기를 확인하려면 Camera.Parameters.getSupportedPictureSizes()를 사용해야합니다.

+5

불행히도'setDisplayOrientaion()'은 미리보기에만 적용되며'onPicturetaken()'에서 캡쳐 된 버퍼에는 영향을주지 않습니다. 실제 솔루션은 http://stackoverflow.com/a/18447809/192373 –

+2

을 참조하십시오. setRotation은 onPictureTaken에서받은 실제 이미지를 회전시킵니다. – slott