2017-05-15 7 views
0

편집 2 : android : largeHeap = "true"를 매니페스트에 추가 했으므로 이제는 문제가 없습니다. 그러나 올바른 접근 방식인지 확실하지 않아 더 이상 테스트를 수행 할 것이므로 지금은 닫지 않을 것입니다.Java/Android - 비트 맵 생성 - OOM 오류

카메라가 내장 된 카메라 (camera1, Android 4.4.2에서 작동해야하는 앱)에서 작업 중이므로 앱이 가로 모드에서 사진을 찍을 수 있으며 지금은 찍을 가능성을 추가하고 싶습니다. 가로 모드의 풍경 사진.

저는 기본적으로 인물 사진을 찍고 회전하고 자릅니다 (상단과 하단이 잘려서 4 : 3 비율을 갖습니다).

이 코드는 Android 6.0.1 (Samsung Galaxy Tab S2) (현재 테스트 중이지만 이미 30 개)에서 작동하지만 4.4.2 (Motorola Symbol TC70)에서 OOM 오류가 발생합니다. 3 번째 사진을 찍은 후에 오류가 발생합니다.

if (PreferenceManager.getDefaultSharedPreferences(CameraActivity.this).getString(Constants.FOTO_ORIENTATION, Constants.FOTO_ORIENTATION_LANDSCAPE).equals(Constants.FOTO_ORIENTATION_PORTRAIT)) { 
      Matrix matrix = new Matrix(); 
      matrix.postRotate(90); 

      Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 
      bitmap = Bitmap.createBitmap(bitmap, bitmap.getWidth()/2 - bitmap.getHeight()*heightMultiplier/widthMultiplier/2, 0, bitmap.getHeight()*heightMultiplier/widthMultiplier, bitmap.getHeight(), matrix, false); 
      ByteArrayOutputStream streamsy = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, streamsy); 
      data = streamsy.toByteArray(); 
      bitmap.recycle(); 
      try { 
       streamsy.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

이 라인 (66)이다 : 나는 종류의 우둔 해요 누군가가 도움이 될 수 있습니다 희망

bitmap = Bitmap.createBitmap(bitmap, bitmap.getWidth()/2 - bitmap.getHeight()*heightMultiplier/widthMultiplier/2, 0, bitmap.getHeight()*heightMultiplier/widthMultiplier, bitmap.getHeight(), matrix, false); 

아이디어 나 힌트를 가지고

java.lang.OutOfMemoryError 
    at android.graphics.Bitmap.nativeCreate(Native Method) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:809) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:786) 
    at android.graphics.Bitmap.createBitmap(Bitmap.java:718) 
    at de.sdnord.ballistiks.topspeedgt.main.detail_fragment.fotos.CameraActivity$1.onPictureTaken(CameraActivity.java:66) 
    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:940) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5050) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:780) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:596) 
    at dalvik.system.NativeStart.main(Native Method) 

는이 코드를 추가했습니다.

공포

편집 : 난 단지 화면의 중앙을 원하기 때문에 나는 그것을 자르기있어 . Camera Screenshot

Edit2 : android : largeHeap = "true"를 매니페스트에 추가 했으므로 이제는 문제가 없습니다. 그러나 올바른 접근 방식인지 확실하지 않아 더 이상 테스트를 수행 할 것이므로 지금은 닫지 않을 것입니다.

+0

'회전하고 자르기'하면 더 잘 회전하고 ** 축소 할 수 있습니다. –

+0

크기를 줄이면 도움이되지 않습니다. 더 나은 이해를 위해 스크린 샷을 첨부하겠습니다. – Awe

답변

0

android : largeHeap = "true"를 매니페스트에 추가 했으므로 이제는 정상적으로 작동합니다.

경외감