1

我正在尝试旋转从相机拍摄的图像并保存它而不缩小而不显示在视图中,但是当我尝试像这样加载它时

Bitmap bmp = BitmapFactory.decodeFile(tmpImageFilePath);

我得到 OutOfMemoryError。旋转图像对我来说没有问题,但是如何加载并以原始大小保存?我已经用谷歌搜索了一些技术来解决这个问题,但没有一个适合我。

当我尝试这个变体时:

 File f = new File(tmpImageFilePath);
                long filesize = f.length();
                ExifInterface exif = new ExifInterface(f.getPath());
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

                int angle = 0;

                if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
                    angle = 90;
                }
                else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
                    angle = 180;
                }
                else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
                    angle = 270;
                }

                Matrix mat = new Matrix();
                mat.postRotate(angle);
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 8;
                Bitmap bmp = BitmapFactory.decodeFile(tmpImageFilePath, options);    
                Bitmap correctBmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);
                bmp.recycle();
                try {
                    FileOutputStream out = new FileOutputStream(f);
                    correctBmp.compress(Bitmap.CompressFormat.JPEG, 90, out);
                } catch (Exception e) {
                    e.printStackTrace();
                }

我得到较小的图像。

4

0 回答 0