有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java/Android创建位图时出错

Edit2:我在清单中添加了安卓:largeHeap=“true”,现在它似乎工作正常。但是我现在不会关闭它,因为我不确定它是否是正确的方法,我会做更多的测试

我正在开发一款带有内置摄像头的应用程序(camera1,该应用程序需要在Android 4.4.2上运行),该应用程序能够在横向模式下拍摄fotos,现在我想增加在纵向模式下拍摄横向fotos的可能性

所以我基本上采取了肖像模式foto,旋转和裁剪它(切断顶部和底部,所以它有一个4:3的比例)

这段代码在Android 6.0.1(三星Galaxy Tab S2)(目前正在测试,但已经有30个)上运行,但在4.4.2(摩托罗拉符号TC70)上出现OOM错误。我在做了第三个foto后得到了错误

java.lang.OutOfMemoryError
    at 安卓.graphics.Bitmap.nativeCreate(Native Method)
    at 安卓.graphics.Bitmap.createBitmap(Bitmap.java:809)
    at 安卓.graphics.Bitmap.createBitmap(Bitmap.java:786)
    at 安卓.graphics.Bitmap.createBitmap(Bitmap.java:718)
    at de.sdnord.ballistiks.topspeedgt.main.detail_fragment.fotos.CameraActivity$1.onPictureTaken(CameraActivity.java:66)
    at 安卓.hardware.Camera$EventHandler.handleMessage(Camera.java:940)
    at 安卓.os.Handler.dispatchMessage(Handler.java:102)
    at 安卓.os.Looper.loop(Looper.java:136)
    at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:780)
    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:596)
    at dalvik.system.NativeStart.main(Native Method)

我添加了以下代码:

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);

我有点不知所措,希望有人能帮忙,有想法或暗示

敬畏

编辑: 我正在裁剪它,因为我只想要屏幕的中间部分。 Camera Screenshot

Edit2:我在清单中添加了安卓:largeHeap=“true”,现在它似乎工作正常。但是我现在不会关闭它,因为我不确定它是否是正确的方法,我会做更多的测试


共 (1) 个答案

  1. # 1 楼答案

    我在清单中添加了android:largeHeap=“true”,现在它可以正常工作了

    敬畏