处理图像时出现 OutOfMemory 异常

Arc*_*dia 5 java android

可能的重复:
OutOfMemoryError:位图大小超出 VM 预算:- Android

我正在编写一个程序,该程序使用图库中的图像,然后在活动中显示它们(一个图像与活动)。然而,我连续三天一遍又一遍地遇到这个错误,却没有任何消除它的进展:

07-25 11:43:36.197: ERROR/AndroidRuntime(346): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Run Code Online (Sandbox Code Playgroud)

我的代码流程如下:

当用户按下按钮时,会触发一个意图,通向图库:

 Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
 galleryIntent.setType("image/*");
 startActivityForResult(galleryIntent, 0);
Run Code Online (Sandbox Code Playgroud)

一旦用户选择了图像,图像就会显示在图像视图中:

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical">

<ImageView
    android:background="#ffffffff"
    android:id="@+id/image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:maxWidth="250dip"
    android:maxHeight="250dip"
    android:adjustViewBounds="true"/>

 </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在 onActivityResult 方法中我有:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == RESULT_OK) {
        switch(requestCode) {
        case 0:             // Gallery
            String realPath = getRealPathFromURI(data.getData());
            File imgFile = new File(realPath);
            Bitmap myBitmap;
            try {
                myBitmap = decodeFile(imgFile);
                Bitmap rotatedBitmap = resolveOrientation(myBitmap);
                img.setImageBitmap(rotatedBitmap);
                OPTIONS_TYPE = 1;
            } catch (IOException e) { e.printStackTrace(); }

            insertImageInDB(realPath);

            break;
        case 1:             // Camera
Run Code Online (Sandbox Code Playgroud)

decodeFile 方法来自这里,resolveOrientation 方法只是将位图包装成矩阵并将其顺时针旋转 90 度。

我真的希望有人能帮我解决这个问题。

Moh*_*ikh 2

这是因为您的位图尺寸很大,因此请手动减小图像尺寸,或者通过编程方式减小图像尺寸

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap = BitmapFactory.decodeFile(mPathName, options);
Run Code Online (Sandbox Code Playgroud)