【问题标题】:OutOfMemoryError in galaxy s3Galaxy s3中的OutOfMemoryError
【发布时间】:2013-04-27 14:10:07
【问题描述】:
Intent localIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        File dir = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
        random = new Random();
        seqNo = random.nextInt(1000000);
        photoName = String.valueOf(seqNo);
        output = new File(dir, photoName + ".jpeg");
        imgPath = Uri.fromFile(output);
        localIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgPath);
        path = output.getAbsolutePath();
        startActivityForResult(localIntent, PICK_Camera_IMAGE);


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
            if (requestCode== PICK_Camera_IMAGE && resultCode == RESULT_OK)  {


                        try {


                            File f = new File(path);

                            Matrix mat = new Matrix();
                            mat.postRotate(90);
//
                            Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null);
                            Bitmap bmpPic = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);  

注意:我使用此代码使用相机拍照。它可以在除三星 Galaxy s3 之外的所有设备上运行。当我在 s3 上运行时,它会给出类似 OutOfMemoryError 的错误。

LogCat:

04-27 11:26:49.775: E/AndroidRuntime(6356): java.lang.OutOfMemoryError
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.graphics.Bitmap.nativeCreate(Native Method)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.graphics.Bitmap.createBitmap(Bitmap.java:586)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at com.example.camera.CameraAct$10$1.run(CameraAct.java:378)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.os.Handler.handleCallback(Handler.java:615)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.os.Looper.loop(Looper.java:137)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at android.app.ActivityThread.main(ActivityThread.java:4898)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at java.lang.reflect.Method.invokeNative(Native Method)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at java.lang.reflect.Method.invoke(Method.java:511)
04-27 11:26:49.775: E/AndroidRuntime(6356):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)

【问题讨论】:

    标签: android


    【解决方案1】:

    在使用位图之前,您需要减小它的样本大小。这可以用来这样做。

    private Bitmap decodeFile(File file)
    {
        try 
        {
            //********************* decode image size ********************
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(file), null, options);
    
            // ********************** Find the correct scale value. It should be the power of 2. ********************
            options.inSampleSize = BitmapConverter.calculateInSampleSize(options, 145, 105);
            options.inJustDecodeBounds = false;
    
            return BitmapFactory.decodeStream(new FileInputStream(file), null, options);
        } 
        catch(FileNotFoundException eFileNotFoundException) 
        {
    
            return null;
        }
    }
    

    然后如果需要,您可以调用 Bitmap.recycle(),尽管我觉得没有必要。

    【讨论】:

      【解决方案2】:
      BitmapFactory.Options options = new BitmapFactory.Options();
      // will results in a much smaller image than the original
      options.inSampleSize = 8;
      Bitmap bitmap = BitmapFactory.decodeFile(PATH,options);
      

      还可以查看this 可能对您有所帮助的答案。

      【讨论】:

      • 文件 f = new File(path);
      猜你喜欢
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2012-08-28
      • 2012-06-17
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多