편집 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"를 매니페스트에 추가 했으므로 이제는 문제가 없습니다. 그러나 올바른 접근 방식인지 확실하지 않아 더 이상 테스트를 수행 할 것이므로 지금은 닫지 않을 것입니다.
'회전하고 자르기'하면 더 잘 회전하고 ** 축소 할 수 있습니다. –
크기를 줄이면 도움이되지 않습니다. 더 나은 이해를 위해 스크린 샷을 첨부하겠습니다. – Awe